Objective-C(null)和nil之间的差异

时间:2012-05-25 04:14:36

标签: objective-c null

我在这里看到了一些类似问题的先前答案,但我仍然不明白。

这是代码(来自ShareKit)

if (isDismissingView)
  return;

NSLog(@"presentingViewController: %@", [self.currentView presentedViewController]);

if (self.currentView != nil)
{
  // Dismiss the modal view
  if ([self.currentView parentViewController] != nil)
  {
    self.isDismissingView = YES;
    [[self.currentView parentViewController] dismissModalViewControllerAnimated:animated];
  }
  // for iOS5
  else if ([self.currentView respondsToSelector:@selector(presentingViewController)] && [self.currentView presentingViewController]) {     
    //****** it executes this block ******
    self.isDismissingView = YES;            
    [[self.currentView presentingViewController] dismissViewControllerAnimated:animated completion:^{  ...  }
  }
  else
    self.currentView = nil;
}

在NSLog中,结果为(null),显然与nil不同,因为测试它的块是否为nil

else if ([self.currentView respondsToSelector:@selector(presentingViewController)] && [self.currentView presentingViewController])

已执行。

所以我有三个问题。什么是(null)?对象或指针如何变为(null)?测试这种情况的正确方法是什么?

3 个答案:

答案 0 :(得分:4)

NSLog()在为对象格式%@指定nil值时打印“(null)”。您可以通过查看

的输出来验证这一点
NSLog(@"%@", nil);

所以[self.currentView presentsViewController]确实是零。 else if if test at present * ing * ViewController,not present * ed * ViewController。

答案 1 :(得分:2)

nil用于对象,null用于非对象,但我认为NSLog打印null作为对象的描述,即使它意味着为零。您是否尝试设置断点并检查调试器在此代码处所说的内容?

答案 2 :(得分:2)

您正在记录presentedViewController,但正在测试presentingViewController