使用属性进行类初始化

时间:2013-07-19 13:54:44

标签: ios objective-c

我正在学习iOS编程,所以请耐心等待。 想象一下,我有一个课程,我想要一个简单的 init方法(没有参数)和 初始化我的实例变量我希望通过属性来完成。 例如:

@interface MyClass : NSObject
{

}
@property (nonatomic) SomeClass1 *p1;
@property (nonatomic) SomeClass2 *p2;
@property (nonatomic) SomeClass3 *p3;

正如我所提到的,我有一个简单的init,没有参数。没什么,我甚至没有实现它,它继承自NSObject。 所以,现在,如果有人想初始化p1,p2,p3 MyClass1. MyClass *object = [[MyClass alloc] init]; 2. [[object p1] doSomething]; 个变量的变量,那么当有人设置时,就不会出现这样的问题:

object.p1 = [[SomeClass1 alloc] init]

第二行会引发异常,因为之前没有例如{{1}}调用吗?

1 个答案:

答案 0 :(得分:4)

它不会引发异常,因为在Objective-C中,对nil对象指针的方法调用是无操作的 - 没有任何反应。这与C ++不同,在{+ 1}}指针上调用实例方法会导致崩溃。

这实际上非常有用,因为它意味着您可以链接方法调用而不必担心中间方法返回NULL。像这样:

nil

如果消息传递[[[[object p1] doSomething] doSomethingElse] doAnotherThing]; 对象崩溃或引发异常,则必须检查这四个方法调用中的每一个的结果才能安全。

一般情况下,如果您的对象需要nil的有效值才能正常工作或有用,那么将该对象作为p1方法的参数是有意义的。