73fd4bbaebc2ecd802ee8dc2b4c5f7e7
iOS 探究Copy和Strong关键字修饰的属性

背景

在面试的时候,可能会遇到这样一个问题。

  • copystrong关键字都可以修饰NSString吗?如果可以什么时候用copy,什么时候用strong

答:都可以修饰NSString,当我们需要一个父类指针指向子类的时候,如果子类内容进行了修改,而我们不希望父类指针内容也被修改,在这种情况下我们要使用copy关键字。当父类指针指向子类,而子类不会被修改,我们就可以使用strong关键字。总之,就是使用copy关键字是为了防止当父类指针指向子类的时候,被修改。

上面的回答,就像绕口令一样,我们举个例子看下。

举例

  • 创建一个项目,在interface里面写一个属性,使用strong关键字修饰。
@interface ViewController ()
@property (nonatomic, strong) NSString *testString;
@end
  • viewDidLoad中,写如下代码,请问打印结果是什么?
    NSMutableString *mString = [[NSMutableString alloc] initWithString:@"123"]; // 创建一个NSMutableString
    self.testString = mString; // 父类指针指向子类
    [mString appendString:@"666"]; // 修改mString的值

    NSLog(@"self.testString - %@", self.testString);
    NSLog(@"self.testString的地址:%p", self.testString);
    NSLog(@"mString - %@", mString);
    NSLog(@"mString的地址:%p", mString);

```
打印结果:
self.testString - 123666

top Created with Sketch.