Iphone 将一个字符串复制到另一个字符串
如何将一个NSString复制到另一个NSStringIphone 将一个字符串复制到另一个字符串,iphone,nsstring,copy,copywithzone,Iphone,Nsstring,Copy,Copywithzone,如何将一个NSString复制到另一个NSString @interface MyData : NSObject { @private //user's private info NSInteger uID; NSString *name; NSString *surname; NSString *email; NSString *telephone; //user's picture UIImage *image; }
@interface MyData : NSObject
{
@private
//user's private info
NSInteger uID;
NSString *name;
NSString *surname;
NSString *email;
NSString *telephone;
//user's picture
UIImage *image;
}
@property (nonatomic, assign) int uID;
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *surname;
@property (nonatomic, retain) NSString *email;
@property (nonatomic, retain) NSString *telephone;
@property (nonatomic, retain) UIImage *image;
@end
我有两个这种类型的对象。MyData*obj1、obj2
首先是初始化。其次,我想用first初始化
obj2 = [obj1 copy]; //crashes
newData.surname = data.surname; //crashes to
newData.email = data.email;
newData.telephone = data.telephone;
我需要第二个对象的副本不能保留!!!救命啊!塔克斯 您的对象可能应该实现副本本身:
@implementation MyData
-(id)copyWithZone:(NSZone *)zone
{
MyData *obj = [[[self class] alloc] init];
obj.uID = self.uId;
obj.name = self.name
...
return obj;
}
....
@end
您的对象可能应该实现副本本身:
@implementation MyData
-(id)copyWithZone:(NSZone *)zone
{
MyData *obj = [[[self class] alloc] init];
obj.uID = self.uId;
obj.name = self.name
...
return obj;
}
....
@end
您可以使用NSString方法
请参阅,以了解何时可能更倾向于使用相同的字符串。您可以使用NSString方法
请参阅,以了解何时可能更倾向于使用相同的字符串。将@property更改为使用copy而不是retain:
@property (nonatomic) int uID;
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *surname;
@property (nonatomic, copy) NSString *email;
@property (nonatomic, copy) NSString *telephone;
@property (nonatomic, copy) UIImage *image;
请注意,您也不需要为uID分配。把那部分删掉。然后,您可以通过alloc和初始化第二个MyData对象并分配属性轻松创建副本:
MyData data = [[MyData alloc] init];
newData.surname = data.surname;
newData.email = data.email;
newData.telephone = data.telephone;
将@属性更改为使用“复制”而不是“保留”:
@property (nonatomic) int uID;
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *surname;
@property (nonatomic, copy) NSString *email;
@property (nonatomic, copy) NSString *telephone;
@property (nonatomic, copy) UIImage *image;
请注意,您也不需要为uID分配。把那部分删掉。然后,您可以通过alloc和初始化第二个MyData对象并分配属性轻松创建副本:
MyData data = [[MyData alloc] init];
newData.surname = data.surname;
newData.email = data.email;
newData.telephone = data.telephone;
obj2实际上是MyData*?您需要MyData*obj1、*obj2;对这是相同类型的变量!MyData*obj1、*obj2;我刚刚忘记了asterix。那么您想复制NSString还是MyData?我想复制MyData,但我希望不同对象中的字段具有不同的地址。obj2实际上是MyData*?您需要MyData*obj1、*obj2;对这是相同类型的变量!MyData*obj1、*obj2;我刚刚忘记了asterix。那么你想复制NSString还是MyData?我想复制MyData,但我希望不同对象中的字段具有不同的地址。在我的情况下不建议使用此变量。在我的情况下不建议使用此变量。对象具有不同的地址,但!!!!NSString对象具有相同的地址。我需要不同的当前地址。然后你应该使用obj.name=[self.name copy]复制它们,所以如果你需要不同的地址,你必须自己创建。分配NSzone区域,然后使用它复制obj2=[obj1 copyWithZone:zone],并在复制方法中传播:-(id)copyWithZone:(NSzone*)区域{…obj.name=[self.name copyWithZone:zone]…}@Romain上一条注释:“obj.name=[self.name copyWithZone:zone]”这是一个内存泄漏对象有不同的地址,但!!!!NSString对象具有相同的地址。我需要不同的当前地址。然后你应该使用obj.name=[self.name copy]复制它们,所以如果你需要不同的地址,你必须自己创建。分配NSzone区域,然后使用它复制obj2=[obj1 copyWithZone:zone],并在复制方法中传播:-(id)copyWithZone:(NSzone*)区域{…obj.name=[self.name copyWithZone:zone]…}@Romain前面的注释:“obj.name=[self.name copyWithZone:zone]”这是内存泄漏