我正在阅读我关于Objective-C [编程Objective-C第4版]的第一本书,我在这本书的中途,但有一件事让我感到困扰,就是它没有解释为什么我们初始化对象。Objective-C为什么使用init?
我试着玩与对象,例如分配他们的内存,但不启动它们,程序中的所有内容都与以前一样。
我会很感激一些例子解释这一点,也。
我正在阅读我关于Objective-C [编程Objective-C第4版]的第一本书,我在这本书的中途,但有一件事让我感到困扰,就是它没有解释为什么我们初始化对象。Objective-C为什么使用init?
我试着玩与对象,例如分配他们的内存,但不启动它们,程序中的所有内容都与以前一样。
我会很感激一些例子解释这一点,也。
init方法中的代码是类特定的 - 它执行该特定类所需的任何初始化。有些情况下,类不需要执行任何初始化,因此删除此方法调用将不起作用。
但是,按照惯例,你应该总是使用init--如果有人在将来为某个类添加一些必需的初始化代码,该怎么办?
参见:
为了解决你的“一切正常”的观点,对Objective-C的有趣的事情是,页头将所有的实例变量为零,并且将消息发送到零没有按”采取任何动作,只是返回nil,所以在大多数情况下,你不会看到一个问题,直到你会尝试做一些非法的,认为这样
@interface MyObject : NSObject
@property (nonatomic, strong) NSString *string;
@end
@implementation MyObject
@end
类现在,如果我们只希望它页头如:
MyObject *m = [MyObject alloc];
实例变量_string
或财产string
将是零,我们可以发送不同的消息给它,就像[string length]
无任何伤害,因为消息到零等于无。
但且说我们希望这个字符串添加到阵列,像
@[m.string]
现在你会得到一个例外,因为NSArray中不能包含nil
,只有完全成熟的对象。您可以通过在MyObject.init中初始化您的值来轻松解决此问题。
漂亮人为的例子,但希望表明的,为什么当你不初始化:)
其中一个主要的原因,你不应该使用alloc
的返回值,而不是直接的一切不破点使用[[Class alloc] init]
的返回值是init
可能会返回与alloc
不同的对象。
苹果的文件提到了这一点:
注:这是可能的init返回一个不同的对象不是被ALLOC创建 ,所以最好的做法嵌套调用,如图所示。 永远不要初始化一个对象,而不要重新指定任何指向该对象的指针。作为一个例子,不这样做:如果调用初始化返回一些其他对象
NSObject *someObject = [NSObject alloc]; [someObject init];
,你会留下一个 指针最初分配的对象,但从来没有 初始化。
正是你想要什么? – 2013-04-24 05:32:08
初始化对象对于对象意味着什么/达到什么的解释。 – 2013-04-24 05:38:07