objective c,检查对象是否未定义或为零

时间:2010-09-24 17:54:33

标签: objective-c

好的,我创建了自己的类(MyObject)子类NSObject

然后在我的代码中我宣布:

MyObject * myObject;

然后在我的功能中,我做了:

if(myObject == nil)
{
 myObject = [self getObject];
}

我的if语句返回false,我希望它是真的。

在调试模式下:只是声明它正在使用一些随机值为其分配实例。 那么,我是否必须覆盖init函数,使其返回nil,然后创建自己的initWith函数?

3 个答案:

答案 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;