http://blog.csdn.net/csz0102/article/details/25984275

注:以下讨论都是在ARC模式下

我们在iOS开发中最经常碰到的“引用(reference)”的使用是在error上,比如如下代码

  1. NSError *error = nil;
  2. BOOL success = [myContext save:&error];
  3. if (!success) {
  4. [NSApp presentError:error];
  5. return;
  6. }

这里的save方法实现大概是这样子

  1. - (BOOL)save:(NSError **)error
  2. {
  3. ...
  4. //假设出现了错误
  5. if (YES) {
  6. //An error occurred
  7. NSMutableDictionary *errorDetail = [NSMutableDictionary dictionary];
  8. [errorDetail setValue:@"Failed to do something wicked" forKey:NSLocalizedDescriptionKey];
  9. *error = [NSError errorWithDomain:@"myDomain" code:100 userInfo:errorDetail];
  10. return NO;
  11. }
  12. return YES;
  13. }

下面来说一下需要注意的地方

1.可以注意到传递参数用的是&error,并且接收参数用的是(NSError **)。

其中&error指的是传这个变量的“引用”,即传变量的地址。(NSError **)其实是(NSError * __autoreleasing *)的缩写,指的是引用将会自动释放。

2.error是本地变量,如果error是一个实例变量(instance variable)的话会报错,具体报错信息为:“passing address of non-local object to __autoreleasing parameter for write-back”。

解决方法很简单,把(NSError **)修改为(NSError * __strong *)。

想要了解引用传递更细节的可以去看一下SO上的回答,分析的非常详细:Handling Pointer-to-Pointer Ownership Issues in ARC

最新文章

  1. Php:学习笔记(一):版本选择
  2. 用word制作电子书最简捷模式 支持epub和mobi目录
  3. 在windows下面配置redis集群遇到的一些坑
  4. 记录在xx公司被考核的15天及自己的感想
  5. NYOJ题目839合并
  6. 再过几个月Apple Watch就要正式发布了
  7. maven中Rhino classes (js.jar) not found - Javascript disabled的处理
  8. Java for LeetCode 043 Multiply Strings
  9. 统计文件夹下java代码行数的小程序--主要是学习任务队列的思想
  10. [功能帮助类] C# BaseRandom随机数,随机字符,可限制范围-帮助类 (转载)
  11. Java 设计模式_复合模式(2016-08-31)
  12. Entityframework 伪CodeFirst开发模式应用于Sqlite数据库
  13. sql 里的 IF ELSE 语句用法
  14. Echarts数据可视化parallel平行坐标系,开发全解+完美注释
  15. SpringBoot轻松整合ElasticSearch
  16. 2、CentOS下编译安装Python2.7.6(转)
  17. weui textarea超出字符被截断
  18. WPF常用样式总结
  19. Linux运行Java出现“Exception in thread "main" java.lang.OutOfMemoryError: Java heap space”报错
  20. Xcode 常用命令

热门文章

  1. 经典实用的iptables shell脚本
  2. Python——基本的方法(2)
  3. MySQL---4、语句规范
  4. Skype坑爹报错:“旧版本无法删除,请联络您的技术支持小组 ”的解决办法
  5. 三、synchronized同步锁
  6. csu 1365 双向链表模拟超时
  7. hdu 1026 Ignatius and the Princess I 搜索,输出路径
  8. 解决全站字符乱码(POST和GET中文编码问题)
  9. 从BASE理论到CAP理论
  10. 深入分析ReentrantLock公平锁和非公平锁的区别 (转)