iOS面试题:用 @property 声明的 NSString(或 NSArray,NSDictionary)经常使用 copy 关键字,为什么?如果改用 strong 关键字,可能造成什么问题?

  • 使用 copy 无论给我传入是一个可变对象还是不可对象,我本身持有的就是一个不可变的副本。
  • 如果使用 strong,那么这个属性就有可能指向一个可变对象,如果这个可变对象在外部被修改了,那么会影响该属性。
    @property (nonatomic, readwrite, strong) NSArray *myArray;

    NSArray *array = @[@1, @2, @3, @4];

    //NSMutableArray *invalidMutableArray = array; // Warning.
    //[invalidMutableArray removeAllObjects]; // Crash.

    NSMutableArray *mutableArray = [NSMutableArray arrayWithArray:array];

    self.myArray = mutableArray;
    [mutableArray removeAllObjects];;
    NSLog(@"%@", self.myArray); // ()

    [mutableArray addObjectsFromArray:array];
    self.myArray = [mutableArray copy];
    [mutableArray removeAllObjects];;
    NSLog(@"%@", self.myArray); // (1,2,3,4)

更多:iOS面试题合集

你可能感兴趣的:(iOS面试题:用 @property 声明的 NSString(或 NSArray,NSDictionary)经常使用 copy 关键字,为什么?如果改用 strong 关键字,可能造成什么问题?)