在一个基于视图的简单项目中,我使用以下代码在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/

10-12 02:32