美文网首页
ios基础之一天一道笔试题(2)

ios基础之一天一道笔试题(2)

作者: 66be37b2096c | 来源:发表于2019-01-26 15:34 被阅读3次

    请写出程序执行后的打印结果:

    @property (nonatomic, strong) NSString *aStrongString;
    @property (nonatomic, copy) NSString *aCopyString;
    

    代码1:

    NSString *string = @"Hello";
    self.aCopyString = string;
    self.aStrongString = string;
    mString = @"Hello  World"
    NSLog(@"aCopyString is :%@ \r\n aStrongString is :%@",self.aCopyString,self.aStrongString);
    

    代码2:

    NSMutableString *mString = [[NSMutableString alloc] initWithString:@"Hello"];
    self.aCopyString = mString;
    self.aStrongString = mString;
    [mString appendFormat:@"\t%@",@"World"]; 
    NSLog(@"%@,%@",self.aCopyString,self.aStrongString);
    

    代码1打印结果:Hello, Hello,
    代码1打印结果:Hello, Hello World
    解析:
    本题主要考察strong和copy属性修饰的区别以及深拷贝和浅拷贝:
    1)当string是不可变对象时,copy是浅拷贝,会增加string的引用计数,只拷贝指针对象,指向string指向的地址,strong则是强引用string对象,增加string的引用计数,指向string指向的地址,当string的值发生改变时其指向的地址会发生改变,copy和strong修饰的对象指向的地址不会发生改变
    2)当string是可变对象时,copy是深拷贝,此时只会拷贝string的值,拷贝出来的对象是不可变对象,指向新的地址,不增加string的引用计数,strong则是强引用string对象,增加string的引用计数,指向string指向的地址,当string的值发生改变,指向的地址不会发生改变,copy修饰的对象值不会发生改变,而strong修饰的对象值会发生改变

    相关文章

      网友评论

          本文标题:ios基础之一天一道笔试题(2)

          本文链接:https://www.haomeiwen.com/subject/gqabjqtx.html