Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c @property(retain)是否需要发布?_Objective C_Cocoa - Fatal编程技术网

Objective c @property(retain)是否需要发布?

Objective c @property(retain)是否需要发布?,objective-c,cocoa,Objective C,Cocoa,下面是三段代码,前两段是两个对象的接口以及两个@property命令。请注意,这只是我的学习,它不是应用程序的一部分,只是一个小测试程序 在添加(保留)到第二个@property后,我注意到我的程序退出时我的机器对象正在泄漏,我所做的是在Artist objects dealloc中添加一个版本,这听起来正确吗 @interface Machine : NSObject { NSString *name; NSString *type; NSString *os; }

下面是三段代码,前两段是两个对象的接口以及两个@property命令。请注意,这只是我的学习,它不是应用程序的一部分,只是一个小测试程序

在添加(保留)到第二个@property后,我注意到我的程序退出时我的机器对象正在泄漏,我所做的是在Artist objects dealloc中添加一个版本,这听起来正确吗

@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
进行平衡。