在以下示例中,不stringWithString:(NSString *)
的theName
存储器地址/位置复制到name
或它实际上拷贝从theName
到name
数据?澄清@property属性
@interface AddressCard:NSObject
-(void)setName:(NSString *)theName;
@end
@implementation AddressCard
NSString *name;
-(void)setName:(NSString *)theName
{
if(name!=theName)
name = [NSString stringWithString:theName];
}
@end
如果我改变了代码以下,这是什么copy
有什么不同?
@interface AddressCard:NSObject
@property (copy, nonatomic) NSString *name;
@end
@implementation AddressCard
@synthesize name;
@end
一般而言,确实copy
(@property
属性)从一个变量复制数据或拷贝数据的地址到另一个?如果是后一种情况,当变量代表大数据时,我们不会消耗大量内存吗?
谢谢您的时间和响应!
我觉得你对于“拷贝”的作用感到困惑。它所做的只是向接收方发送“复制”消息,在某些情况下(不可变的'NSStrings或'NSData'),将只返回其自身的保留版本,因为没有任何可复制的东西。 –
下面的答案有帮助吗? – bryanmac
是的。他们非常有帮助。我对延迟承认表示歉意。 –