我对ARC有一点误解。我正在使用以下代码创建一个新的 UIViewController:
CGRect screenRect = [[UIScreen mainScreen] bounds];
LocationProfileView *locationProfile = [[LocationProfileView alloc] initWithLocation:l];
locationProfile.view.frame = CGRectMake(0, screenRect.size.height, screenRect.size.width, 400);
[appDelegate.window addSubview:locationProfile.view];
[UIView animateWithDuration:.25 animations:^{
locationProfile.view.frame = CGRectMake(0, 0, screenRect.size.width, screenRect.size.height);
}];
在其 UIVIew 中,我放置了一个从屏幕上删除视图的按钮。问题在于locationProfile
它在添加到屏幕后立即被释放,所以每次我试图点击“关闭”按钮(它调用LocationProfileView
类中的方法)时,我的应用程序都会崩溃。
所以我添加了一个属性:
@property(nonatomic, strong) LocationProfileView *locationProfile;
并将第二行代码更改为:
locationProfile = [[LocationProfileView alloc] initWithLocation:l];
但是现在我的类在我再次启动它之前不会被释放(因为它失去了对第一个实例的引用LocationProfileView
?)。每次点击“关闭”按钮时,我应该怎么做才能让我的班级被解除分配?我想设置locationProfile
tonil
会起作用,但这意味着我必须在主类(包含代码块的那个)中调用一个方法。
这样做的正确方法是什么?对不起,如果我的问题太无聊了。
注意:
l
是一个自定义类的实例,其中包含一些要在LocationProfileView
's中显示的信息UIVIew
。