请给我一些关于如何更改NSString变量的建议。
在我班上,我设置了一个成员var:
NSString *m_movieName;
...
@property(nonatomic, retain) NSString *m_movieName;
在viewDidLoad方法中,我为此var指定了一个默认名称:
-(void)viewDidLoad{
NSString *s1 = [[NSString alloc] initWithFormat:@"Forrest Gump"];
self.m_movieName = s1;
...
[s1 release];
[super viewDidLoad]
}
在某个函数中,我想给这个var一个新名字,所以我确实喜欢:
-(void)SomeFunc{
NSString *s2 = [[NSString alloc] initWithFormat:@"Brave Heart"];
//[self.movieName release]; // ??????? Should perform here?
self.m_moiveName = s2;
[s2 release];
}
我知道,NSString * var只是指向已分配内存块的指针,'assign'操作将使用count递增此内存块。对于我的情况,我应该在为其分配值之前释放m_movieName吗?如果我不释放它(通过[self.movieName release]),前一个块何时何地被释放? 非常感谢你的帮助!
答案 0 :(得分:7)
不,您已将属性声明为retain
,这意味着您的对象将保留属性值。在分配新值之前,合成的(=编译器生成的)setter将负责释放旧的NSString,因此您不必自己管理它。
在直接访问属性的后备存储(实例中为m_movieName
)时要小心,因为绕过setter不会自动释放当前值。
答案 1 :(得分:3)
首先,我的建议是,如果您使用的是NSString
媒体资源,请使用复制代替保留。检查this SO问题以获取详细信息。
@property(nonatomic, copy) NSString *m_movieName;