Objective c @property(retain)是否需要发布?
下面是三段代码,前两段是两个对象的接口以及两个@property命令。请注意,这只是我的学习,它不是应用程序的一部分,只是一个小测试程序 在添加(保留)到第二个@property后,我注意到我的程序退出时我的机器对象正在泄漏,我所做的是在Artist objects dealloc中添加一个版本,这听起来正确吗Objective c @property(retain)是否需要发布?,objective-c,cocoa,Objective C,Cocoa,下面是三段代码,前两段是两个对象的接口以及两个@property命令。请注意,这只是我的学习,它不是应用程序的一部分,只是一个小测试程序 在添加(保留)到第二个@property后,我注意到我的程序退出时我的机器对象正在泄漏,我所做的是在Artist objects dealloc中添加一个版本,这听起来正确吗 @interface Machine : NSObject { NSString *name; NSString *type; NSString *os; }
@interface Machine : NSObject
{
NSString *name;
NSString *type;
NSString *os;
}
@interface Artist : NSObject
{
NSString *name;
Machine *system;
}
@property(copy) NSString *name;
@property(retain) Machine *system;
@end
// DEALLOC IN @implementation Artist
-(void)dealloc {
NSLog(@"_deal: %@", self);
[system release];
[super dealloc];
}
gary每次调用retain或alloc方法时,您都必须手动调用release。是的,根据操作系统的不同将其设置为nil或调用release。如果您的目标是Mac OS X,最好的答案是打开垃圾收集并删除-dealloc方法
要回答具体问题,您需要在
-dealoc
方法中发布名称和系统。谢谢,我知道“alloc”“new”“copy”并保留您有责任放弃对象的所有权。我只是不确定在这种情况下,retain是否遵循相同的规则,显然是这样。你的意思是“取决于GC是否打开”。你可以在任何一个操作系统上关闭GC(因此需要释放它)(复制)
和(保留)
属性意味着设置了-retain
,需要通过-dealloc
中的-release
进行平衡。