首先,据我所知,init in Objective-C
,在功能上类似于构造函数 Java
,因为它用于初始化实例变量并准备一个类来做一些工作。它是否正确?
我明白那个 NSObject
器物 init
因此,它不需要在任何声明中声明 .h
文件。
但是如何为给定的类自定义init的实现,例如:
(id) initWithName:(NSString *) name
应该这样的声明作为一部分列出 .h
,还是没有必要?它是按惯例完成还是有其他推理?
首先,据我所知,init in Objective-C
,在功能上类似于构造函数 Java
,因为它用于初始化实例变量并准备一个类来做一些工作。它是否正确?
我明白那个 NSObject
器物 init
因此,它不需要在任何声明中声明 .h
文件。
但是如何为给定的类自定义init的实现,例如:
(id) initWithName:(NSString *) name
应该这样的声明作为一部分列出 .h
,还是没有必要?它是按惯例完成还是有其他推理?
init
与Java / C ++中的构造函数绝不相似。构造函数始终在创建对象时执行。但执行 init
你决定。如果你不发送 init
之后的消息 alloc
然后它不会执行。
// init does not execute here
MyObject *obj = [MyObject alloc];
如果你从中衍生出来,这将毫无问题地发挥作用 NSObject
作为 init
的 NSObject
什么也没做。
您无需添加 init
在头文件中,因为它是从中继承的 NSObject
但是您需要将自定义init方法(未继承)添加到头文件中。注意 init
方法只是具有命名约定的常规方法,但从技术上讲,与其他方法没有区别。
如果未在头文件中指定自定义init方法,但将该消息发送到对象,则编译器将生成警告。不会有编译错误。因此,如果您决定忽略该警告,那么您也可以从标题中省略该警告。但是如果实际上没有实现该方法,您将会遇到运行时崩溃。因此,最好添加未在头文件中继承的所有方法。
init
与Java / C ++中的构造函数绝不相似。构造函数始终在创建对象时执行。但执行 init
你决定。如果你不发送 init
之后的消息 alloc
然后它不会执行。
// init does not execute here
MyObject *obj = [MyObject alloc];
如果你从中衍生出来,这将毫无问题地发挥作用 NSObject
作为 init
的 NSObject
什么也没做。
您无需添加 init
在头文件中,因为它是从中继承的 NSObject
但是您需要将自定义init方法(未继承)添加到头文件中。注意 init
方法只是具有命名约定的常规方法,但从技术上讲,与其他方法没有区别。
如果未在头文件中指定自定义init方法,但将该消息发送到对象,则编译器将生成警告。不会有编译错误。因此,如果您决定忽略该警告,那么您也可以从标题中省略该警告。但是如果实际上没有实现该方法,您将会遇到运行时崩溃。因此,最好添加未在头文件中继承的所有方法。
是的,如果您希望能够调用此个性化初始化方法,则必须声明它(initWithName
)。首先想到你必须要做的就是打电话 [super init];
。