我正在开发一个ARC启用项目。从视图控制器我推MyClass的,ARC:对象 - 代表关系
- (void)pushMyClass {
MyClass *myClass = [[MyClass alloc] init];
[self.navigationController pushViewController:myClass animated:YES];
}
做一些操作,我大跌眼镜MyClass的经过。这里的问题是,MyClass没有被取消分配。以下是课程的外观。
/* MyHelperClassDelegate */
@protocol MyHelperClassDelegate <NSObject>
- (void)helperDidFinishHelping:(MyHelperClass *)helper;
@end
/* MyHelperClass接口*/
@interface MyHelperClass : NSObject {
__weak id <MyHelperDelegate> delegate;
}
@property(nonatomic, weak) id<MyHelperDelegate> delegate;
- (void)startHelping;
@end
/* MyHelperClass实施*/
@implementation MyHelperClass
@synthesize delegate;
- (void)dealloc {
delegate = nil;
}
/* MyClass的*/
@interface MyClass : UIViewController <MyHelperClassDelegate> {
MyHelperClass *helper;
}
@implementation MyClass {
- (void)dealloc {
helper.delegate = nil;
}
- (void)getHelp {
helper = [MyHelperClass new];
helper.delegate = self;
[helper startHelping];
}
- (void)helperDidFinishHelping:(MyHelperClass *)helper {
}
}
MyHelperClass要求使用NSMutalbleURLRequest & NSURLConnection的来获取一些数据的Web服务,并将其保存到用户的默认值。
有一点需要注意的是,如果我评论行helper.delegate = self;,那么MyClass被取消分配。
如何让MyClass在导航控制器弹出时被取消分配?
谢谢。
您已经包含了很多代码,这些代码似乎与您所询问的这个MyClass实例无关,与此无关。这个MyHelperClass事情与任何事情有什么关系?我认为要么你需要更清楚你的代码实际在做什么,或者你需要包含更多相关的代码。 – Chuck 2013-04-11 17:25:39
如果你拿出'helper.delegate = self'这行,它是否会被释放?如果行为没有改变,那么问题就在于别的地方。 – 2013-04-11 17:31:23
您是否添加了断点或nslog语句来释放以验证其被调用? – 2013-04-11 18:54:24