如果我这样做 -
SomeObject* someObject = [[SomeObject alloc] init];
[[someObject release] release];
Run Code Online (Sandbox Code Playgroud)
我认为我的程序不会崩溃,因为第二次过度释放没有任何作用.
而
[[someObject autorelease] autorelease];
Run Code Online (Sandbox Code Playgroud)
会崩溃,因为对象是通过链传递两次释放的.
这只是一个好奇的问题,我想我到目前为止从未遇到任何问题.
(请参阅此答案以获得解释oneway.)
你的第一个例子甚至没有编译,因为void!= nil.但是如果你只是release在一个保留计数为1的对象上调用两次,它肯定会崩溃.
至于为什么release返回void时autorelease返回id:第一个说我不再需要这个对象,你可以摆脱它.因此,如果它会返回一些东西并且你会对它进行操作,那么你很可能会操作一个死对象.相比之下,autorelease或多或少地说:"很快我就不再需要这个物体,而是让它一直存在,直到我完成当前的方法."
所以当你看到它们相似时,他们说我不再需要这个物体,但它们在时间上有所不同:release说"你现在可以摆脱物体",同时autorelease说"你可以摆脱它对象后来 ".
| 归档时间: |
|
| 查看次数: |
1348 次 |
| 最近记录: |