ARC打开以后,objective c的二级指针
来源:互联网 发布:银魂在日本的人气 知乎 编辑:程序博客网 时间:2024/05/20 23:56
代码1
#import <Foundation/Foundation.h>@interface ClassA: NSObject @end@implementation ClassA -(id)init{if(self=[super init]){NSLog(@"%s %@", __FUNCTION__, self);}return self;}-(void)dealloc{NSLog(@"%s %@", __FUNCTION__, self);}@endvoid print_obj(ClassA **obj){ NSLog(@"%s %@", __FUNCTION__, *obj);}int main(const int argc, const char *argv[]){ @autoreleasepool// 正确的代码 ClassA *a; print_obj(&a);// Pointer to non-const type 'ClassA *' with no explicit ownership// 声明没有明确的所属,我理解是指没有明确的所有权修饰符,就是说预处理器不会自动加入所有权修饰符 ClassA **b; print_obj(b);// 我们加一个所有权修饰符,Passing address of non-local object to __autoreleasing parameter for write-back// 说明print_obj函数的参数ClassA **obj被预处理为ClassA * __autoreleasing *obj,附加了_autoreleasing的所有权修饰符// 和__strong不一致,所以编译报错 ClassA * __strong *c; print_obj(c);// 正确的代码 ClassA * __autoreleasing *d; print_obj(d); } return 0;}
再看一下代码2
#import <Foundation/Foundation.h>int main(const int argc, const char *argv[]){ @autoreleasepool// 直接报错,Pointer to non-const type 'NSObject *' with no explicit ownership// 说明预处理器不处理这种声明 NSObject **a; } return 0;}所以,对于参数是Type **obj的形式,会预处理为Type * __autoreleasing *的形式。对于局部变量的声明,不会做预处理。
0 0
- ARC打开以后,objective c的二级指针
- 二级指针与ARC不为人知的特性
- [Objective-C] 理解 Objective-C 的 ARC
- 理解 Objective-C 的 ARC
- 理解 Objective-C 的 ARC
- 理解 Objective-C 的 ARC
- 理解objective c的ARC
- 理解 Objective-C 的 ARC
- 理解Objective-C的ARC
- 理解 Objective-C 的 ARC
- Objective-C中,ARC下的 strong和weak指针原理解释,objective-cweak
- Objective-C: ARC和Non-ARC混编的问题
- ios之理解 Objective-C 的 ARC
- ARC Objective-c的内存管理
- 深入理解Objective C的ARC机制
- 深入理解Objective C的ARC机制
- [objective-c] ARC 补充
- 【Objective-C】ARC学习
- 现代经济感悟(3)-不协调的电商C-未来和期盼
- spring aop(八)--使用BeanNameAutoProxyCreator创建代理
- OAuth授权简介
- QWebView + JS 实现简单地图
- django中ajax返回json
- ARC打开以后,objective c的二级指针
- Convert Sorted List to Binary Search Tree - Leetcode
- 人本是人 不必刻意去做人 世本是世 无须精心去处世
- UIButton里面的文字对齐方法
- 对齐方式
- 字符串转码
- copy,assign,strong,retain,weak,readonly,nonatomic的区别
- 【Java】随机姓名的生成
- JAVA JDK 环境变量配置