坚持释放我正在创建的所有内容的规则,为什么行[cellText release]
会崩溃我的应用?它必须是真的简单的东西,我对iPhone应用程序开发者来说还是新手。
...
NSMutableString *cellText = [[NSMutableString alloc] initWithString:@""];
// the cell is a section cell
if (/* some condition */) {
cellText = @"some text";
}
// why does this make the app crash?!
[cellText release];
...
答案 0 :(得分:1)
问题在于您实际上是在尝试释放另一个对象,而不是您创建的对象。
在cellText = @"some text";
行上,您将指针指向另一个对象。
你可以尝试这样的事情
NSMutableString *cellText = nil; // make sure that the pointer is initialized with nil
// the cell is a section cell
if (/* some condition */) {
cellText = [[NSString alloc] initWithString:@"some text"];
}
// now you can release it (if it's nil, no problem, because sending a message to nil has no effect)
[cellText release];
答案 1 :(得分:0)
cellText
是对象的指针。分配给它时,分配指针而不是在对象内分配。所以通过做
cellText = @"some text";
您忘记了原始指针并记录了指向常量字符串@"some text"
的指针。当你尝试release
时会导致错误,因为它不是你分配的对象,它是一个常量。 (虽然我认为你应该能够将release
发送到一个常量字符串,但它应该什么也不做,所以如果崩溃可能有点奇怪。)
与此同时,您的原始字符串永远不会被释放,因为您不再有指向它的指针以发送消息。