【发布时间】:2011-08-04 10:53:40
【问题描述】:
我有两个属性 NSString,我已经合成并且都是只读的,所以我不能使用属性方法 self.但我虽然两个传递的字符串大部分都被保留了。所以,我添加了retain来保留属性。但我觉得,我会在这里泄漏,因为传递的对象增加了它们的保留计数。但是我的属性会在不发送消息的情况下保留这些字符串吗?
-(void)setValue:(NSString *)passedString1 second:(NSString *)passedString2{
myString = [passedString1 retain];
hisString = [passedString2 retain];
}
假设我有声明为 NSArray 的数组(变量)的属性,并且我以这种方式将 NSDictionary 作为参数传递;
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"text", @"This is some text", nil];
[self setValueForArray:dict];
-(void)setValueForArray:(NSDictionary*)passedDict{
NSArray *someArray = [NSArray arrayWithObject:passedDict];
if(array!=someArray){
[array release];
array = someArray; //I dont think I should retain this property here since it is retained by someArray
}
}
这种方法对于 NSDictionary 和 NSArray 类型是否正确。
【问题讨论】:
-
你尝试过构建和分析吗?
-
是的,我这里有一些漏洞。我认为这些泄漏是因为passedString1 和passedString2 被保留。这些字符串不是由alloc、copy或retain创建的,而是在上面的方法中保留的。
-
您是否将属性仅声明为只读或复制或保留?
-
我已将属性声明为保留。