- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
根据NSMutableArray documentation :
removeLastObject
raises anNSRangeException
if there are no objects in the array.
出于某种原因,我似乎能够在一个空数组上调用这个方法,并且没有抛出异常。
这是一个测试用例:
- (void)testNSMutableArray
{
NSMutableArray* arr = [[NSMutableArray alloc] init];
STAssertTrue([arr count] == 0, @"Array count should be 0");
STAssertThrows([arr removeLastObject], @"Should throw NSRangeException");
}
这个测试用例在我的最后一行失败并显示消息:
[arr removeLastObject] raised (null). Should throw NSRangeException
我在这里很困惑吗?文档有错吗?
最佳答案
查看程序集,似乎这种行为在 Lion 中发生了变化。以下是 [__NSArrayM removeLastObject]
的部分实现(这是您调用的实际实现):
0x3494975a: movs r0, #7
0x3494975c: bl 0x3490c26c ; _CFExecutableLinkedOnOrAfter
0x34949760: cbz r0, 0x3494977c ; -[__NSArrayM removeLastObject] + 60
这会调用值为 7 的 CFExecutableLinkedOnOrAfter
;如果它返回 1(它在我的机器上这样做),你就会得到你所看到的行为。如果它返回 0,则会出现异常。
CFExecutableLinkedOnOrAfter
是一个未记录的函数,但是一些 snooping around建议在特定版本的 Mac OS X 之后链接可执行文件时返回。一些 more snooping表明 7 的值对应于 10.7。
因此,如果您运行的是 Lion 或更高版本,则不会出现异常。对我来说这听起来像是一个文档错误!
关于objective-c - NSMutableArray removeLastObject 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14760542/
我正在讨论 NSMutableArray 的 -removeAllObjects、-removeLastObject 等方法。文档只说这些方法从数组中“删除”对象。被移除的对象是否被释放? 最佳答案
我这里有非常简单的代码: NSArray* divisions = [[NSString stringWithFormat: @"%d", system("ssh git@nebula \"ls\""
根据NSMutableArray documentation : removeLastObject raises an NSRangeException if there are no objects
我是一名优秀的程序员,十分优秀!