-1 memory-management objective-c retaincount
通过简单的保留/释放方案查看此代码片段:
#import <Foundation/Foundation.h>
@interface SomeClass : NSObject
@end
@implementation SomeClass
@end
int main(int argc, const char * argv[])
{
SomeClass *aClass = [[SomeClass alloc] init];
NSLog(@"retainCount: %lu", [aClass retainCount]);
[aClass retain];
NSLog(@"retainCount: %lu", [aClass retainCount]);
[aClass release];
NSLog(@"retainCount: %lu", [aClass retainCount]);
[aClass release];
NSLog(@"retainCount: %lu", [aClass retainCount]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是结果输出:
2013-04-29 17:33:50.695 retainCount: 1
2013-04-29 17:33:50.697 retainCount: 2
2013-04-29 17:33:50.697 retainCount: 1
2013-04-29 17:33:50.698 retainCount: 1
Run Code Online (Sandbox Code Playgroud)
最后一个retainCount应为"0"或应用程序崩溃.为什么结果为"1"?!
http://www.whentouseretaincount.com
对已释放的对象进行消息传递是未定义的行为.它可能会崩溃,它可能会起作用,它可能会完全出乎意料.
在重新分配时,您的程序不会浪费任何与新释放的内存相关的循环(除非您打开malloc涂鸦),因此行为的未定义部分.
您的程序也不会浪费任何将保留计数减少到0的周期; 无论如何,该对象将被解除分配,为什么要这么麻烦?