Relaese,Alloc和Nil一个对象?

问题描述

| 这是处理内存的正确方法吗? 方法1:没有崩溃
 UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(220.0f,7.0f,57.0f,35.0f)] ;

    button = nil;

    [button release];
方法2:崩溃
 UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(220.0f,35.0f)] ;

   [button release];

   button = nil;
    

解决方法

        两者都不正确。您应该使用类方法
buttonWithType
:来构造按钮。它将根据您的指定设置类型。不应该直接分配/启动按钮。 (也许这是崩溃的源头,尽管不应该这样) 该类方法将返回一个自动释放的对象,因此您不能释放它。 尽管如此(第二种方法和其他对象以及普通的alloc / init一样),第二种方法是正确的。第一次泄漏。     ,        无需将保存分配的对象的变量设置为nil。如果您不再需要它,请释放它。而已。     ,        第一个不正确,并且是内存泄漏的情况。 我们大多数人都在使用第二种方法,因此不应崩溃。 使用方法2发布相关代码。     ,        为什么将
button = nil;
按钮的值设置为nil,在
[button release];
之后,您无需这样做,只需执行
[button release];
,按钮就会被释放而不会泄漏。