gpt4 book ai didi

iphone - 我应该在为其分配新值之前释放 NSString 吗?

转载 作者:行者123 更新时间:2023-12-03 16:24:07 26 4
gpt4 key购买 nike

请给我一些关于如何更改 NSString 变量的建议。

在我的类(class),我设置了一个成员变量:

NSString *m_movieName;
...
@property(nonatomic, retain) NSString *m_movieName;

在 viewDidLoad 方法中,我为此变量分配了一个默认名称:

-(void)viewDidLoad{
NSString *s1 = [[NSString alloc] initWithFormat:@"Forrest Gump"];
self.m_movieName = s1;
...
[s1 release];
[super viewDidLoad]
}

在某些函数中,我想给这个变量起一个新名称,所以我喜欢:

-(void)SomeFunc{
NSString *s2 = [[NSString alloc] initWithFormat:@"Brave Heart"];
//[self.movieName release]; // ??????? Should perform here?
self.m_moiveName = s2;
[s2 release];
}

我知道, NSString* var 只是一个指向已分配内存块的指针,“分配”操作将增加该内存块的使用计数。对于我的情况,我应该在为其赋值之前释放 m_movieName 吗?如果我不释放它(通过[self.movi​​eName release]),前一个 block 将在何时何地被释放?非常感谢您的帮助!

最佳答案

不,您已将属性声明为retain,这意味着您的对象将保留属性值。合成的(=编译器生成的) setter 将在分配新值之前释放旧的 NSString,因此您不必自己管理。

直接访问属性的后备存储(实例中的 m_movieName)时要小心,因为绕过 setter 不会自动释放当前值。

关于iphone - 我应该在为其分配新值之前释放 NSString 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2984178/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com