- 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方法制作并且没有发布的最新对象。 我真的想知道这种情况虽然不是很重要。
答案 0 :(得分:2)
您没有@synthesize
这些@property
,因此您的代码无效。 - 添加@synthesize
指令,如下所示:
@synthesize string, object;
是的,在这种情况下,您应该在release
中向他们发送-dealloc
消息,因为您正在使用copy
和retain
,这两者都获得了接收者的所有权
- (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访问器。