bob*_*obo 13 memory-management objective-c nsstring
我在一个类中声明了一个NSString属性,而且Objective-c抱怨:
NSString没有指定'assign','retain'或'copy'属性
然后随便让我知道"使用"分配".
有人可以向我解释正常C内存管理功能方面的分配,保留和复制之间的区别吗?
Ale*_*ski 31
我认为它引起你的注意,assign
正在使用a,而不是retain
或copy
.由于a NSString
是一个对象,在引用计数环境中(即没有垃圾收集),这可能是"危险的"(除非它是故意的设计).
然而,之间的区别assign
,retain
以及copy
如下:
assign:在属性的setter方法中,可以将实例变量简单分配给新值,例如:
- (void)setString:(NSString*)newString
{
string = newString;
}
Run Code Online (Sandbox Code Playgroud)
这可能会导致问题,因为Objective-C对象使用引用计数,因此通过不保留对象,有可能在您仍在使用它时释放字符串.
保留:这会在您的setter方法中保留新值.例如:
- (void)setString:(NSString*)newString
{
[newString retain];
[string release];
string = newString;
}
Run Code Online (Sandbox Code Playgroud)
这样更安全,因为您明确声明要维护对象的引用,并且必须在它被释放之前释放它.
copy:这会在setter方法中生成字符串的副本:
- (void)setString:(NSString*)newString
{
if(string!=newString)
{
[string release];
string = [newString copy];
}
}
Run Code Online (Sandbox Code Playgroud)
这通常与字符串一起使用,因为制作原始对象的副本可确保在使用它时不会更改它.
归档时间: |
|
查看次数: |
13301 次 |
最近记录: |