Objective-C为什么使用init?
我正在读我的第一本关于Objective-C的书【Objective-C编程第四版】,我正在读这本书的中途,但有一件事让我感到困扰,那就是它没有解释我们初始化对象的原因 我试着和对象一起玩,例如分配它们的内存,但不启动它们,程序中的所有东西都和以前一样工作Objective-C为什么使用init?,objective-c,object,init,Objective C,Object,Init,我正在读我的第一本关于Objective-C的书【Objective-C编程第四版】,我正在读这本书的中途,但有一件事让我感到困扰,那就是它没有解释我们初始化对象的原因 我试着和对象一起玩,例如分配它们的内存,但不启动它们,程序中的所有东西都和以前一样工作 我也希望有一些例子来解释这一点。init方法中的代码是特定于类的-它执行特定类所需的任何初始化。在某些情况下,类不需要执行任何初始化,因此删除此方法调用不会产生任何效果 然而,按照惯例,您应该始终使用init—如果将来有人要向类添加一些必需的
我也希望有一些例子来解释这一点。init方法中的代码是特定于类的-它执行特定类所需的任何初始化。在某些情况下,类不需要执行任何初始化,因此删除此方法调用不会产生任何效果 然而,按照惯例,您应该始终使用init—如果将来有人要向类添加一些必需的初始化代码,该怎么办 另见:
init方法中的代码是特定于类的——它执行特定类所需的任何初始化。在某些情况下,类不需要执行任何初始化,因此删除此方法调用不会产生任何效果 然而,按照惯例,您应该始终使用init—如果将来有人要向类添加一些必需的初始化代码,该怎么办 另见:
为解决所有的问题,ObjuleC的有趣之处在于,OLLC将所有实例变量设置为零,并且将消息发送到NIL没有任何作用,它只返回NIL,所以在大多数情况下,除非您尝试做非法的事情,否则不会看到问题,请考虑这样的类
@interface MyObject : NSObject
@property (nonatomic, strong) NSString *string;
@end
@implementation MyObject
@end
现在,如果我们将其分配为:
MyObject *m = [MyObject alloc];
实例变量_string或属性string应该是nil,我们可以向它发送不同的消息,比如[string length],而不会造成任何伤害,因为message to nil等于nil
但是假设我们想把这个字符串添加到数组中,比如
@[m.string]
现在您将得到一个异常,因为NSArray不能包含nil,只能包含完整的对象。通过在MyObject.init内初始化值,可以轻松解决此问题
非常做作的例子,但希望能说明为什么当你不初始化时一切都不会中断:为了说明一切都有效的原因,Objective-C的有趣之处在于alloc将所有实例变量设置为nil,而向nil发送消息没有任何作用,它只返回nil,所以在大多数情况下,除非你尝试做违法的事情,否则你不会看到问题,考虑这样的一个类:
@interface MyObject : NSObject
@property (nonatomic, strong) NSString *string;
@end
@implementation MyObject
@end
现在,如果我们将其分配为:
MyObject *m = [MyObject alloc];
实例变量_string或属性string应该是nil,我们可以向它发送不同的消息,比如[string length],而不会造成任何伤害,因为message to nil等于nil
但是假设我们想把这个字符串添加到数组中,比如
@[m.string]
现在您将得到一个异常,因为NSArray不能包含nil,只能包含完整的对象。通过在MyObject.init内初始化值,可以轻松解决此问题
这是一个精心设计的示例,但希望能说明为什么不初始化时一切都不会中断:不应该直接使用alloc的返回值而不是使用[[Class alloc]init]的返回值的一个主要原因是init可能会返回与alloc不同的对象 苹果的文档中提到: 注意:init可能返回与以前不同的对象 由alloc创建,因此最佳做法是嵌套调用,如图所示。 在不重新分配指向该对象的指针的情况下,切勿初始化该对象 对象例如,不要这样做:
NSObject *someObject = [NSObject alloc];
[someObject init];
如果对init的调用返回其他对象,那么您将得到一个
指向最初分配但从未分配的对象的指针
初始化
来源:不应该直接使用alloc的返回值而不是使用[[Class alloc]init]的返回值的一个主要原因是init可能返回与alloc不同的对象 苹果的文档中提到: 注意:init可能返回与以前不同的对象 由alloc创建,因此最佳做法是嵌套调用,如图所示。 在不重新分配指向该对象的指针的情况下,切勿初始化该对象 对象例如,不要这样做:
NSObject *someObject = [NSObject alloc];
[someObject init];
如果对init的调用返回其他对象,那么您将得到一个
指向最初分配但从未分配的对象的指针
初始化
来源:你到底想要什么?关于初始化对象对对象意味着什么/实现什么的解释。你到底想要什么?关于初始化对象对对象意味着什么/实现什么的解释。