次の例ではstringWithString:(NSString *)
、のメモリアドレス/場所をコピーしますtheName
かname
、それとも実際にデータをからにコピーしtheName
ますname
か?
@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
属性)はデータのアドレスをコピーしますか、それともある変数から別の変数にデータをコピーしますか?後者の場合、変数が大きなデータを表すときに多くのメモリを消費していませんか?
お手数をおかけしますが、よろしくお願いいたします。