我正在学习iOS编程,所以请耐心等待。
想象一下,我有一个课程,我想要一个简单的 init
方法(没有参数)和
初始化我的实例变量我希望通过属性来完成。
例如:
@interface MyClass : NSObject
{
}
@property (nonatomic) SomeClass1 *p1;
@property (nonatomic) SomeClass2 *p2;
@property (nonatomic) SomeClass3 *p3;
正如我所提到的,我有一个简单的init
,没有参数。没什么,我甚至没有实现它,它继承自NSObject。
所以,现在,如果有人想初始化p1,p2,p3
MyClass
个1. MyClass *object = [[MyClass alloc] init];
2. [[object p1] doSomething];
个变量的变量,那么当有人设置时,就不会出现这样的问题:
object.p1 = [[SomeClass1 alloc] init]
第二行会引发异常,因为之前没有例如{{1}}调用吗?
答案 0 :(得分:4)
它不会引发异常,因为在Objective-C中,对nil
对象指针的方法调用是无操作的 - 没有任何反应。这与C ++不同,在{+ 1}}指针上调用实例方法会导致崩溃。
这实际上非常有用,因为它意味着您可以链接方法调用而不必担心中间方法返回NULL
。像这样:
nil
如果消息传递[[[[object p1] doSomething] doSomethingElse] doAnotherThing];
对象崩溃或引发异常,则必须检查这四个方法调用中的每一个的结果才能安全。
一般情况下,如果您的对象需要nil
的有效值才能正常工作或有用,那么将该对象作为p1
方法的参数是有意义的。