我应该写这个版本吗?

时间:2011-02-16 08:26:13

标签: objective-c memory-management

- example.h -

@property ( copy ) NSString *string;
@property ( retain ) Object *object;

-- example.m --
( void ) do {
    // I have used 'string' and 'object' using their setter method several times.
}

( void ) dealloc {
    [ string release ]; // Should I write this code?
    [ object release ]; // Should I write this code?
}

他们没有使用alloc,copy,new。 但他们指的是用他们的setter方法制作并且没有发布的最新对象。 我真的想知道这种情况虽然不是很重要。

4 个答案:

答案 0 :(得分:2)

您没有@synthesize这些@property,因此您的代码无效。 - 添加@synthesize指令,如下所示:

@synthesize string, object;

是的,在这种情况下,您应该在release中向他们发送-dealloc消息,因为您正在使用copyretain,这两者都获得了接收者的所有权

- (void) dealloc {
   [string release];
   [object release];
   [super dealloc];
}

也不要忘记在[super dealloc]方法的底部发现-dealloc !!

答案 1 :(得分:1)

是的,你应该在这个例子中释放它们。

答案 2 :(得分:0)

是的,因为您的NSString *string属性为copy,而NSObject *object属性为retain。通过使用他们的setter,您的实例将分别复制并保留您分配给它们的对象。

答案 3 :(得分:0)

由于您@synthesized属性,请记住将属性分配给nil将为您发布,确保代码无法继续使用它。

- (void) dealloc {
  string = nil;
  object = nil;
  [super dealloc];
}

如果您有实例变量(iVars),那么您应该使用release,因为没有可以为您发布的setter访问器。