__weak & __unsafe_unretained的用法以及区别
来源:互联网 发布:软件教育 编辑:程序博客网 时间:2024/05/16 04:23
转载自: http://www.jianshu.com/p/df0269e0d3c3
__unsafe_unretained: 不会对对象进行retain,当对象销毁时,会依然指向之前的内存空间(野指针)
__weak: 不会对对象进行retain,当对象销毁时,会自动指向nil
代码示例
#import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { Person *p = [[Person alloc] init]; Person *p1 = p;
p = nil; //p已经指向nil,但是还能访问name属性,说明对象没有被销毁,默认指针被__strong修饰 //__strong Person *p = [[Person alloc] init]; //__strong Person *p1 = p; NSLog(@"%@",p1);}
output: <Person: 0x100200000>
- 当使用__weak时
#import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { Person *p = [[Person alloc] init]; __weak Person *p1 = p p = nil; //p指向nil,p1为弱指针,p1指向nil NSLog(@"%@",p1); }
- 当使用__unsafe_unretained时
#import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { Person *p = [[Person alloc] init]; __unsafe_unretained Person *p1 = p; p = nil; //p指向nil,p1的弱引用指针不会销毁,会继续指向对象的地址,对象已经销毁,此时p1访问的是"僵尸"对象 NSLog(@"%@",p1); }
访问对象已经销毁-[Person respondsToSelector:]: message sent to deallocated instance 0x100302560
0 0
- __weak & __unsafe_unretained的用法以及区别
- [iOS]关于__unsafe_unretained与__weak
- [ARM]__weak 的用法
- __Weak的用法
- __strong、__weak、__unsafe_unretained和__autoreleasing修饰符
- iOS内存管理1-__weak与__unsafe_unretained
- __block和__weak的区别
- __block和__weak 的区别
- __blick 和 __weak的区别
- __weak与__block的区别
- __weak和__block的区别
- __Block和__Weak的区别
- __block和__weak的区别
- __block和__weak的区别
- _block和__weak 的区别
- iOS内存管理-所有权修饰符:__strong, __weak/__unsafe_unretained, __autoreleasing
- oc——类——__strong __weak __unsafe_unretained
- __block/__weak/__bridge的用法说明
- pat 1108. Finding Average (20)
- [NSBundle mainBundle] infoDictionary
- android studio新建项目后出现bug finished with non-zero exit value 1
- 面试中经常被问到的单例类
- dom4j解析xml
- __weak & __unsafe_unretained的用法以及区别
- hihoCoder 1142 三分求极值
- HTML之认识标签(二)
- 安卓绑定本地服务Service并与之通信
- 自定义饼状图
- Spring—AOP详解
- LeetCode 257. Binary Tree Paths
- StringBuffer和StringBuilder的区别
- 496. Next Greater Element I