ios知识积累

ios - weak strong

2015-01-16  本文已影响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 发送消息就不会出现崩溃了。 

上一篇下一篇

猜你喜欢

热点阅读