Iphone 正确使用viewDidUnload

Iphone 正确使用viewDidUnload,iphone,objective-c,ios,memory-management,viewdidunload,Iphone,Objective C,Ios,Memory Management,Viewdidunload,我知道以前也有人问过类似的问题。但我已经搜索了一段时间了,事情还是有点混乱。所以这里是 我没有使用弧。 如果您有一个带有实例变量和如下属性的viewcontroller: ViewController.h: @interface ViewController : UIViewController{ NSDictionary *someDict; } @property(nonatomic, retain)UIView *someView; @property(assign)UIView

我知道以前也有人问过类似的问题。但我已经搜索了一段时间了,事情还是有点混乱。所以这里是

我没有使用弧。 如果您有一个带有实例变量和如下属性的viewcontroller:

ViewController.h:

@interface ViewController : UIViewController{
    NSDictionary *someDict;
}
@property(nonatomic, retain)UIView *someView;
@property(assign)UIView *someOtherView;
ViewController.m:

-(void)viewDidUnload{
    self.someView = nil;
    [someDict release];
    [someOtherView release];
    super viewDidUnload];
} 
这是实现viewDidUnload的正确方法吗? 设置someDict=nil似乎是错误的,因为它会泄漏,因此我猜测是释放。 这同样适用于其他视图,因为它未被保留


我错了吗?谢谢你的帮助

self.someView=nil
不会泄漏,因为它等于由
@property(非原子,保留)UIView*someView的属性对自动生成的
[self-setSomeView:nil]
。它具有
retain
属性,因此设置新对象时将释放保留的对象

我相信
[someDict release]应位于
dealloc
中。和
[someOtherView发布],因为它是一个不具有所有权的
assign
属性

更多参考资料:


viewDidUnload
中,您应该释放并取消作为视图控制器主视图的保留子视图的所有视图(即,不是字典!)。就这么简单

那么你的

self.someView = nil;
如果正确,只需将所有其他保留的子视图也添加到该方法中

不要释放
someOtherView
,因为这是一个已分配的属性。释放它将导致应用程序崩溃


如果我是你,我会去掉iVar声明(
someDict
),使用所有属性。

我相信如果你使用的是ARC,那么你只需要使用
someDict=nil我没有使用ARC。。。这就是editnice的问题,我相信这个问题是新的iOS程序员提出的第一个问题。谢谢回答!第一个我很确定,但是另外两个呢?任何线索?
someDict
都是您的类的成员,在实例被销毁之前不应发布<代码>查看卸载
位置不正确。对于
someOtherView
,它看起来像是对另一个视图的弱引用,这就是我这么说的原因。在我的回答中添加了更多引用。那么你的意思是,如果字典someDict是一个视图,它应该被发布,因为它不是保留属性?SomeOther观点也是如此?我接受了你关于清除所有IVAR的建议,但这提出了一个问题。继承权呢?