我知道在Objective-C中,在iOS SDK上编程时,指针一直在使用。
在Objective-C中了解指针是否已初始化的最佳方法是什么? 检查它是否为零?
CSomeClass *p;
//....
if(p==nil)
??
PS:换句话说,Objective-C中的变量默认值是多少?指针?
其实我有以下情况。
想象一下,我在某些课程中有一些指针Pointer *p1
,Pointer *p2
。然后想象某人称这个类,即它是一个视图,必须显示。然后在我的班级中,我想检查一下,如果没有初始化p1
和p2
(例如,p1 == nil
?p2==nil
?)我想显示空文本。
这些比较是在Objective-C中完成的吗?例如,如果未初始化,p1
和p2
的默认值是多少?默认情况下,值是否已初始化为Objective-C中的某些值?也许是为了?
答案 0 :(得分:3)
了解指针是否已初始化的最佳方法是什么 目标C?检查它是否为零
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 *p1
,Pointer *p2
。然后想象有人打电话 这个类,即它是一个视图,必须显示。然后在我的班上 我想检查一下是否没有初始化p1和p2(例如,p1 == 零? p2 == nil?)我想显示空文本。是这些 在ObjC中完成比较?
if (p1 && p2)
或if ((p1 != nil) && (p2 != nil))
。两者都很好。在else部分中,您可以添加应显示的空文本。例如,如果不是,p1和p2的默认值是什么 初始化?默认情况下,值会初始化为某些内容 ObjC?可能为空?
CSomeClass *p1 = nil;
,否则它将是一个带有一些垃圾值的悬空指针。答案 1 :(得分:1)
这里需要理解的重点是Objective-C使用引用计数 - 这就是为什么说“指针初始化”的术语有点问题。
了解对象是否存在的方法(并不意味着它已初始化!)
if (!object) {
NSLog(@"Object is nil");
}
如果您希望释放一个物体,最好将它取出来。这样,其他人不会向解除分配的实例发送消息(导致令人讨厌的崩溃):
[object release],object = nil;