copy,strong区别

2018-06-15  本文已影响0人  MrOreo
希望永远这样睡着

1.4 strong和copy在修饰字符串时有什么区别?

- (void)testCopyAndStrongString
{
    NSString *string = @"I'm a old key";
  //  (__NSCFConstantString *) $0 = 0x0000000104f38a80 @"I'm a old key"
    self.strongStr = string;
  //(__NSCFConstantString *) $1 = 0x0000000104f38a80 @"I'm a old key"
    self.copiedStr = string;
  //(__NSCFConstantString *) $2 = 0x0000000104f38a80 @"I'm a old key"
    
    string = @"I'm a new key";
  //p string  (__NSCFConstantString *) $3 = 0x0000000104f38aa0 @"I'm a new key"
  //p _strongStr  (__NSCFConstantString *) $4 = 0x0000000104f38a80 @"I'm a old key"
  //p _copiedStr (__NSCFConstantString *) $5 = 0x0000000104f38a80 @"I'm a old key"
    
}
- (void)testCopyAndStrongMString
{
    NSMutableString *stringM = [NSMutableString stringWithString:@"I'm a old mutable key"];
    // p stringM  (__NSCFString *) $0 = 0x00000002814b0840 @"I'm a old mutable key"
    self.strongStr = stringM;
    // p _strongStr  (__NSCFString *) $1 = 0x00000002814b0840 @"I'm a old mutable key"
    self.copiedStr = stringM;
    // p _copiedStr  (__NSCFString *) $2 = 0x00000002814b0cf0 @"I'm a old mutable key"

    [stringM appendString:@"hahahha"];
    //  p stringM (__NSCFString *) $3 = 0x00000002814b0840 @"I'm a old mutable keyhahahha"
    // p _strongStr (__NSCFString *) $4 = 0x00000002814b0840 @"I'm a old mutable keyhahahha"
    // p _copiedStr (__NSCFString *) $5 = 0x00000002814b0cf0 @"I'm a old mutable key"
}

综上两种情况, 使用copy时,对内容的更改并不会直接引起原有值的变化,但是使用strong时,可能发生变化.引起数据的错乱;毕竟两者的使用场景是不同的,其实是没有可比性的.

上一篇 下一篇

猜你喜欢

热点阅读