在类中声明一个retain属性,编译器默认会将[property release]添加到-dealloc吗?

0 memory-management properties objective-c retain

可能重复:
是否需要释放Objective-c 2.0属性的内存?

例如:

@interface DataMode : NSObject {
    NSString * name;
}

@property (nonatomic, retain) NSString * name;

@end
Run Code Online (Sandbox Code Playgroud)

将编译器自动添加[name release]-dealloc

- (void) dealloc
{
   [name release];    // if we  don't add it , will the compiler add "[name release]"???
   [super release];     

}
Run Code Online (Sandbox Code Playgroud)

小智 5

这取决于您使用的内存管理方案:

  • 使用垃圾收集,您不需要释放支持声明的属性的实例变量 - 垃圾收集器会自动执行该操作.事实上,-dealloc即使您需要在解除分配时执行其他任务,也根本不会定义方法:垃圾收集器发送-finalize而不是-dealloc;

  • 使用自动引用计数(ARC),您不会定义该-dealloc方法.ARC将自动释放支持声明的属性的实例变量.-dealloc如果需要,您可以定义一种方法来执行其他内务处理任务,但您不会发送[super dealloc];

  • 使用手动内存管理,您需要手动释放支持声明的属性然后发送的实例变量[super dealloc].