Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 将一个字符串复制到另一个字符串_Iphone_Nsstring_Copy_Copywithzone - Fatal编程技术网

Iphone 将一个字符串复制到另一个字符串

Iphone 将一个字符串复制到另一个字符串,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; }

如何将一个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;
}

@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]”这是内存泄漏