在setter中,按如下方式保留和释放NSString是更好的做法:
-(void) setName:(NSString *)newName
{
if(newName != nil)
{
[newName retain]:
[m_Name release];
m_Name = newName; //Where m_Name is a NSString *
}
//I'm not sure for this code, I have difficulties understanding memory-management in ObjC
}或者通过NSMutableString更改该值:
-(void) setName:(NSString *)newName
{
if(newName != nil)
[m_Name setString:newName]; //Where m_Name is a NSMutableString *
}如果其中任何一种或两种方法都不正确,请让我知道。
发布于 2013-05-30 22:00:45
第一种解决方案更好。这就是retain属性的处理方式。您保留新值,然后释放旧值。另外,如果要处理的nil情况不是很重要,您可以依赖由@synthesize生成的默认实现。
对于第二种解决方案,这真的是没有必要的,而且有点违反惯例。此外,在此解决方案中,您必须在为m_name分配任何字符串之前对其进行初始化。你可以在init中做到这一点。
- (void) init {
if (self = [super init]) {
m_name = [[NSMutableString alloc] init];
}
}结论:优先解决方案肯定更好。
https://stackoverflow.com/questions/16837983
复制相似问题