在一个基于视图的简单项目中,我使用以下代码在appDelegate
文件中添加了一个变量:
NSObject* gObj;
@property(noatomic,retain) NSObject* gObj;
@synthesize gObj;
然后,在我的
testviewController.m
viewDidLoad方法中,添加了以下测试代码:testAppDelegate* delegate = [[UIApplication sharedApplication] delegate];
NSObject* p1 = [NSObject alloc] init];//the reference count is 1
delegate.gObj = p1;//the reference count of p1 is 2
[p1 release];//the ref of p1 is 1 again
[delegate.gObj release];//the ref of p1 is 0
NSObject* p2 = [NSObject alloc] init]; // a new object
delegate.gObj = p2;//this time the program crash, why? should not the pointer be supposed to be re-used again?
谢谢。
最佳答案
它崩溃了,因为当你这样做
delegate.gObj = p2;
在内部,委托的setGObj方法在保留新值之前会释放gObj的旧值。
所以代替
[delegate.gObj release];
当您完成p1时,您想做
delegate.gObj = nil;
这不仅会释放p1,还会告诉委托人放开它。
关于ios - 可以重新使用Objective-C指针吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1892817/