我有一个从网上下载的示例应用程序 在这里我无法理解以下代码
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
if (localNotif == nil)
return;
也
if (!array1)
return;
此代码是否意味着如果对象不存在则返回.....
HELP
答案 0 :(得分:5)
在Cocoa中,如果调用成功,初始化器将返回一个对象指针,如果无法创建该对象,则返回nil。
两种情况都在检查对象是否存在。实际上,检查是否存在指向对象的指针,并在对象不存在时简单地返回。例如,以下是对象的常用初始化形式。
- (id)init {
// Call the superclass initialiser first and check that it was successful.
if (!(self = [super init])) {
// If the superclass initialiser failed then self will be nil.
// return a nil because we cannot create this object.
return nil; // Bail!
}
// Do more initialising
// If we can initialise the superclass and ourself, return a pointer to ourself
return self;
}
但是,您提供的代码段不足以判断代码是否正确。例如,第一个示例是不正确的,如果它是初始化方法的一部分,因为它没有返回任何类型的对象。
修改强>
从你的其他例子来看,这些都是打印hiiiiiiii
NSArray *arr;
if(arr) { NSLog(@"hiiiiii");
和
NSArray *arr = [[NSArray alloc]init];
if(arr) { NSLog(@"hiiiiii");
在第一种情况下,您声明arr是指向NSArray的指针,但由于它尚未初始化,因此该指针只是随机数的垃圾值。但它不是nil
所以你的if语句评估为真。这并不意味着它是指向NSArray的有效指针。
在第二个示例中,您声明了一个NSArray指针并对其进行初始化。这已成功初始化,因此指针不是nil,if语句的计算结果为true。在这种情况下,您有一个有效的NSArray指针。
声明不是初始化!
也许如果你解释一下你想要做什么,我们就能更好地回答你的问题。
答案 1 :(得分:2)
他们都在检查对象是否为零。在第一种情况下,它似乎有点愚蠢:))
答案 2 :(得分:-1)
是的,除了第一种情况,localNotif不会是nil,因为它已经设置