好的,我创建了自己的类(MyObject)子类NSObject
然后在我的代码中我宣布:
MyObject * myObject;
然后在我的功能中,我做了:
if(myObject == nil)
{
myObject = [self getObject];
}
我的if语句返回false,我希望它是真的。
在调试模式下:只是声明它正在使用一些随机值为其分配实例。 那么,我是否必须覆盖init函数,使其返回nil,然后创建自己的initWith函数?
答案 0 :(得分:5)
在Objective-C中,(或一般的C),
MyObject* myObject;
在方法实现中使用 myObject
执行不初始化 nil
。同样,
int a;
未初始化 a
0.这就是很久以前让C决定的人。有一个历史理性的原因是这样的。
只需将其显式初始化为
MyObject* myObject=nil;
请注意,在调用zero
之前,类接口中定义的ivar会自动设置为init
。
更新:另请注意,myObject
是包含数据的真实对象的指针。所以,如果你只是做
MyObject* myObject;
这意味着myObject
指向一大块垃圾内存,根本无法正常工作。
MyObject* myObject=nil;
使myObject
指向无。现在它至少一直没有做任何事情。这行是什么
MyObject* myObject=[[MyObject alloc] init];
的做法是在内存中分配一个MyObject
对象,对其进行初始化,然后使myObject
指向正确分配和初始化的内存块。现在,如果MyObject
具有接口
@interface MyObject:NSObject {
NSString* string;
}
@end
如果你定义了init方法,
@implementation MyObject
-(id)init {
if(self=[super init]) {
... do something ...
}
return self;
}
成功执行[super init]
后,Objective-C保证ivar string
设置为nil
,即string
指向任何内容。但并不是分配或初始化NSString
。
答案 1 :(得分:1)
将MyObject声明为nil:
MyObject *myObject = nil;
这样它就什么都不做。
答案 2 :(得分:0)
确保将myObject初始化为nil,如下所示: -
MyObject * myObject = nil;