gpt4 book ai didi

objective-c - NSMutableArray removeLastObject 异常

转载 作者:太空狗 更新时间:2023-10-30 03:51:16 26 4
gpt4 key购买 nike

根据NSMutableArray documentation :

removeLastObject raises an NSRangeException 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com