【发布时间】:2013-05-17 17:22:00
【问题描述】:
我一直认为向 nil 指针发送消息通常会返回 0。所以这同样适用于属性。但是随后这段代码 sn-p 似乎与我的假设相矛盾
NSArray *testArray;
NSInteger i = 0;
NSLog(@"testArray.count-1=%ld", testArray.count-1);
NSLog(@"i<testArray.count-1=%d", i<testArray.count-1);
输出是
2013-05-22 11:10:24.009 LoopTest[45413:303] testArray.count-1=-1
2013-05-22 11:10:24.009 LoopTest[45413:303] i<testArray.count-1=1
虽然第一行有意义,但第二行没有。我错过了什么?
编辑:感谢@JoachimIsaksson 和@Monolo 为我指出(双关语)正确的方向。问题实际上是有符号和无符号的,下面的代码显示了它:
NSArray *testArray;
NSInteger i = 0;
unsigned ucount = 0;
int count = 0;
NSLog(@"testArray.count-1=%ld", testArray.count-1);
NSLog(@"i<testArray.count-1=%d", i<testArray.count-1);
NSLog(@"i<ucount-1=%d", i<ucount-1);
NSLog(@"i<count-1=%d", i<count-1);
输出是
2013-05-22 11:26:14.443 LoopTest[45496:303] testArray.count-1=-1
2013-05-22 11:26:14.444 LoopTest[45496:303] i<testArray.count-1=1
2013-05-22 11:26:14.444 LoopTest[45496:303] i<ucount-1=1
2013-05-22 11:26:14.445 LoopTest[45496:303] i<count-1=0
【问题讨论】:
-
小心,你的
NSArray *testArray没有初始化为nil。 -
@s.bandara 在这个问题上——这正是他想要的。
-
@Abizern - 如果指针未初始化,则结果为“未定义”。
-
如果这是用 ARC 编译的,那么编译器会插入指令来初始化
testArray = nil。 -
@MartinR 酷,我不知道 :)
标签: objective-c pointers properties null