指针初始化

时间:2012-12-25 07:08:24

标签: objective-c ios

我知道在Objective-C中,在iOS SDK上编程时,指针一直在使用。

在Objective-C中了解指针是否已初始化的最佳方法是什么? 检查它是否为零?

CSomeClass *p;
//....
if(p==nil)
??

PS:换句话说,Objective-C中的变量默认值是多少?指针?


更新

其实我有以下情况。

想象一下,我在某些课程中有一些指针Pointer *p1Pointer *p2。然后想象某人称这个类,即它是一个视图,必须显示。然后在我的班级中,我想检查一下,如果没有初始化p1p2(例如,p1 == nilp2==nil?)我想显示空文本。

这些比较是在Objective-C中完成的吗?例如,如果未初始化,p1p2的默认值是多少?默认情况下,值是否已初始化为Objective-C中的某些值?也许是为了?

2 个答案:

答案 0 :(得分:3)

  

了解指针是否已初始化的最佳方法是什么   目标C?检查它是否为零

  • 是的,你是对的(通过初始化,我假设你的意思是分配而不是设置默认属性的实际初始化)。如果您在ARC中将其声明为nil,则可以检查CSomeClass *p;。在非ARC中,您应该将其初始化为CSomeClass *p = nil;

所以在这里你可以这样做,

if (p) { //or if (p != nil)
  //do your operations
} else { //same as if (!p) or if (p == nil)
  //display error message
}
  

其实我有以下情况。想象一下,我有一些指示   某个班级中Pointer *p1Pointer *p2。然后想象有人打电话   这个类,即它是一个视图,必须显示。然后在我的班上   我想检查一下是否没有初始化p1和p2(例如,p1 ==   零? p2 == nil?)我想显示空文本。是这些   在ObjC中完成比较?

  • 是的,在目标C中没问题。您可以将其检查为if (p1 && p2)if ((p1 != nil) && (p2 != nil))。两者都很好。在else部分中,您可以添加应显示的空文本。
  

例如,如果不是,p1和p2的默认值是什么   初始化?默认情况下,值会初始化为某些内容   ObjC?可能为空?

  • 在ARC中,它将是零。在非ARC中,在执行此操作之前,您应该等同于CSomeClass *p1 = nil;,否则它将是一个带有一些垃圾值的悬空指针。

以下是documentation on ARC.

答案 1 :(得分:1)

这里需要理解的重点是Objective-C使用引用计数 - 这就是为什么说“指针初始化”的术语有点问题。

了解对象是否存在的方法(并不意味着它已初始化!)

if (!object) {
      NSLog(@"Object is nil");
}

如果您希望释放一个物体,最好将它取出来。这样,其他人不会向解除分配的实例发送消息(导致令人讨厌的崩溃):

[object release],object = nil;