在NSString中,NSNumber类型属性,哪个更好:保留还是复制?(以及NSArray怎么样?)

moo*_*nce 3 objective-c

如果对象具有类型NSString或属性NSNumber,哪个更好,retaincopy

我认为这些对象是不可变的,(不能改变对象的状态)所以复制更好?

我看到为什么复制更好,分配NSMutableString并更改它的例子,但没有NSMutableNumber.然后在的情况下NSNumber,我最好使用retainNSNumber的对象?

如果copy是因为更好的NSStringNSNumber具有小内存占用,怎么样,如果属性NSArray类型?

NSArraytype也是不可变的,在NSArray属性中使用copy怎么样?

Jer*_*myP 6

使用不可变对象,复制.

对于像大多数NSStrings这样的不可变对象,-copyWithZone:是有效的

-(id) copyWithZone: (NSZone*) zone
{
    return [self retain];
}
Run Code Online (Sandbox Code Playgroud)

因此开销很小.

对于可变对象,可能是复制但是使用大型可变对象(如字符串和大型可变数组),您需要根据对代码进行分析来进行判断调用.当然,对于可变对象,您可能需要原始对象,因为您可能希望查看原始对象中的更改.