我知道这可能与Stackoverflow上的问题完全相反,但今天发生了一件非常奇怪的事情。
我试图向某人展示如何使用Instruments和NSZombies,所以我尝试制造一个崩溃。
我声明了一个NSString,释放了它,然后尝试访问它,但应用程序没有崩溃。
NSString* test = [[NSString alloc] init];
[test release];
NSlog(@"%@", test);
我甚至尝试了两次发布,但它仍然没有使应用程序崩溃,只是打印出null。
请问有人能解释一下我做错了什么或我的逻辑存在哪些缺陷吗?
谢谢
编辑:我也尝试过类似的操作,但仍然没有崩溃。
NSString* test = [[NSString alloc] init];
test = @"something";
NSlog(@"%@", test);
[test release];
NSlog(@"%@", test);
我甚至添加了两个连续的释放操作,并在释放之后添加了一个测试= nil;,只是为了确保。
[[NSString alloc] init]
很有可能会返回一个单例对象,这意味着你不能过度释放它。你应该尝试确保你有一个一次性的对象,例如使用[[NSMutableString alloc] init]
。此外,在对象的创建/销毁过程中,值得在其周围加上自动释放池,以防有任何自动释放操作发生在幕后。 - Lily Ballard