OC基础 copy

h

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN
//字符串对象 最好使用copy, 防止受外部的影响 
@interface Person : NSObject <NSCopying>
@property(nonatomic,copy)NSString* name;  // retain 浅复制 copy 深复制
@property(nonatomic,retain)NSString* age;
-(void)show;


@end

 

m

#import "Person.h"

@implementation Person

-(void)show
{
    NSLog(@"name:%@,age:%ld",_name,(long)[_age integerValue]);
    
    
}
-(id)copyWithZone:(NSZone *)zone
{
    Person* p =[[Person alloc]init];
    p.name=_name;
    p.age=_age; //retain 浅复制
//    p.age=[_age copy]; copy 深复制
    return p;
    
    
}

@end

 

main

#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSMutableString* str=[NSMutableString stringWithString:@"lisi"];
        
        Person* p =[[Person alloc]init];
        p.name=str;
        [p show];
        
        // 修改字符串对象的内容 person的名字一起改变
        NSString* str2=[str copy];
        [str appendString:@"2"];
        NSLog(@"str2:%@",str2);
        p.age=[NSNumber numberWithInteger:25];
        [p show];
        
        //Person copyWithZone
        // 自定义的对象如果要支持copy操作,必须实现copyWithZone : 方法
        Person* p2 =[p copy];
        p.age=[NSNumber numberWithInteger:35];
        [p2 show];
        
         
        
    }
    return 0;
}

 

posted @ 2020-07-08 21:39  逆欢  阅读(134)  评论(0编辑  收藏  举报