2011-02-16 62 views
0

- 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? 
} 

他们没有使用页头,复制,新的。 但他们指出最新的对象是在他们的setter方法中制作而没有发布。 虽然这不是很重要,但我真的很想知道这种情况。

+0

不要忘了在`dealloc`方法的末尾发送'[super dealloc]`。 – 2011-02-16 08:31:18

+0

你有没有`@综合'这些实例变量? – 2011-02-16 08:36:48

+0

这个问题是一个总结。谢谢。 – MonsterK 2011-02-16 09:41:01

回答

2

你没有@synthesize这些@property s,所以你的代码将无法工作。 - 添加@synthesize指令,像这样:

@synthesize string, object; 

是的,你应该向他们发送release消息-dealloc在这种情况下,因为你使用copyretain,它们都获得了接收器的所有权。

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

也不要忘记调用[super dealloc] AT您-dealloc方法的底部!

0

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

+0

谢谢BoltClock。 – MonsterK 2011-02-16 09:43:57

1

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

0

因为你@synthesized你的属性,记得分配属性nil将释放你,确保代码无法继续使用。

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

如果您有实例变量(高德),那么你应该使用release因为没有setter方法访问,这将释放它。

相关问题