ios - weak strong

作者: 小桃桃 | 来源:发表于2015-01-16 14:47 被阅读643次


    ios在arc环境下 引入了 weak 和 strong , 我们来了解下这个2个关键字的作用。


    strong 

    1.我们先声明2个属性

    @property (nonatomic, strong) NSString *str1;

    @property (nonatomic, strong) NSString *str2;

    2.对这2个变量进行实例化

    self.str1 = [[NSString alloc] initWithUTF8String:"string 1"];

    self.str2 = self.str1;

    self.str1 = nil;

    NSLog(@"str 2 = %@",self.str2);

    输出的内容是: str 2 = string 1

    strong 相当于 retain, 引用计数+1

    那么strong 和 retain 的区别呢 ?

    strong 对于有些类型,比如 NSString 相当于使用了Copy,去自动处理了。

    weak

    @property (nonatomic, strong) NSString *str1;

    @property (nonatomic, weak) NSString *str2;

    self.str1 = [[NSString alloc] initWithUTF8String:"string 1"];

    self.str2 = self.str1;

    self.str1 = nil;

    NSLog(@"str 2 = %@",self.str2);

    输出的内容是: str 2 = (null)

    weak 是弱引用,当 str1 被干掉后,weak的引用被设为 nil 了。

    weak 在引用计数中 可以用来防止循环依赖无法释放,造成内存泄漏的问题。

    那么weak 和 assign 的区别呢 ?

    当主对象被释放后, weak 的引用都会被设为 nil ,这样在向 nil 发送消息就不会出现崩溃了。 

    相关文章

      网友评论

        本文标题:ios - weak strong

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