objc block参数上的__autoreleasing怎么理解

看到这样的block的声明

- (void)XXXXXXX:(NSError * __autoreleasing *)error
{
   ...
   *error = ......
   ...
}

于是将__autoreleasing去掉,编译和运行没有任何问题。于是就好奇了,这里到底有什么意义。查找了一下资料,大概的意思是:

首先需要让编译器知道这个参数是什么样的类型,比如strong还是weak这样编译器才知道如何操作引用计数器。如果删除__autoreleasing编译器则会进行推断。如果明确告知编译器如何做,肯定是有利无弊的。这里告诉编译器这个传入参数是引用变量,并且这个参数是__autoreleasing的。因为本来我们传入的参数确实是autoreleasing的所以这里没有任何问题。

时间: 2024-08-03 15:30:01

objc block参数上的__autoreleasing怎么理解的相关文章

Block源码解析和深入理解

Block源码解析和深入理解 Block的本质 Block是"带有自动变量值的匿名函数". 我们通过Clang(LLVM编译器)来将OC的代码转换成C++源码的形式,通过如下命令: clang -rewrite-objc 源代码文件名 下面,我们要转换的Block语法 1 2 3 4 5 6 7 int main(int argc, const char * argv[]) { void (^blk)(void) = ^{ printf("Block\n"); };

如何使用CLI命令在输入文件参数上运行Python脚本来生成输出文件

如何使用CLI命令在输入文件参数上运行Python脚本来生成输出文件. 根据我的理解,analysis.py是python脚本,-s和-p是分别包含Sales.csv和Products.csv中的csv数据的变量名. 在analysis.py中,我如何接受存储在-s和-p中的两个CSV,然后创建一个名为SalesReport.csv的输出? 我是否会创建一个名为SalesReport.csv的空白csv文件,然后将分析的数据写入文件? 或者命令行是否会使用存储在sales-report变量中的数

这样的验证看上去多美——在参数上应用验证特性

如果可以把基于特性的Model验证应用在参数就好了,如图: 通过右键查看定义,可以明显看出RangeAttribute是可以应用在参数上的,如图: 看到这里有木有很嗨皮,就这么简单就是实现了,咳咳如果这样就完了,那我还写这篇干嘛呢,嘻嘻.. 其实这样是不会执行验证的,验证永远都是通过的,不信看图(有图才有真相): 那为啥可以应用在参数上,但是就是不执行验证呢?不要着急请听我慢慢道来. 是这样的:模型验证是在模型绑定的时候执行的,验证信息都是保存在了ModelMetadata里(看下面的图),里面

SpringMVC使用MultipartFile文件上传,多文件上传,带参数上传

一.配置SpringMVC 在spring.xml中配置: <!-- springmvc文件上传需要配置的节点--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="-1&

Note:上下界网络流的理解

无源汇可行流 弧流量限制条件 b(u,v)<=f(u,v)<=c(u,v),(u,v)∈E 不妨设f(u,v)=b(u,v)+f1(u,v), Σ( b(u,v)+f1(u,v) ) = Σ( b(v,w)+f1(v,w) ) Σ b(u,v) - Σ b(v,w) = Σ f1(v,w) - Σf1(u,v) 若存在可行流,0<=f1(u,v)<=c(u,v)-b(u,v),且保证下界流流满. 可以加超级源S,超级汇T. 假定某条边(u,v)的流量限制是[b,c],等价于S→v流

ASP.NET MVC基于标注特性的Model验证:将ValidationAttribute应用到参数上

原文:ASP.NET MVC基于标注特性的Model验证:将ValidationAttribute应用到参数上 ASP.NET MVC默认采用基于标准特性的Model验证机制,但是只有应用在Model类型及其属性上的ValidationAttribute才有效.如果我们能够将ValidationAttribute特性直接应用到参数上,我们不但可以实现简单类型(比如int.double等)数据的Model验证,还能够实现“一个Model类型,多种验证规则”,本篇文章将为你提供相关的解决方案(源代码

&lt;史上最强&gt;深入理解 Python 异步编程(上)

前言 很多朋友对异步编程都处于"听说很强大"的认知状态.鲜有在生产项目中使用它.而使用它的同学,则大多数都停留在知道如何使用 Tornado.Twisted.Gevent 这类异步框架上,出现各种古怪的问题难以解决.而且使用了异步框架的部分同学,由于用法不对,感觉它并没牛逼到哪里去,所以很多同学做 Web 后端服务时还是采用 Flask.Django等传统的非异步框架. 从上两届 PyCon 技术大会看来,异步编程已经成了 Python 生态下一阶段的主旋律.如新兴的 Go.Rust.

关于 HTTP GET/POST 请求参数长度最大值的一个理解误区(转载)

1. Get方法长度限制 Http Get方法提交的数据大小长度并没有限制,HTTP协议规范没有对URL长度进行限制.这个限制是特定的浏览器及服务器对它的限制.下面就是对各种浏览器和服务器的最大处理能力做一些说明. 浏览器/服务器 说明 Microsoft Internet Explorer  IE浏览器对URL的最大限制为2083个字符,如果超过这个数字,提交按钮没有任何反应. Firefox 对于Firefox浏览器URL的长度限制为65,536个字符 Safari URL最大长度限制为 8

微信公共服务平台开发(.Net 的实现)12-------网页授权(上 :更加深入理解OAuth2.0 )

我们首先来认识一下OAuth协议吧,这个东西很早就听说过,总觉得离我很远(我的项目用不到这些),但是最近不得不学习一下了.我在网上找了一些解释,认为解释的最好的是这样说的(出处:http://hi.baidu.com/powerthinks/item/f1cb9b3c7a88251c9dc65efa) 如果你开车去酒店赴宴,你经常会苦于找不到停车位而耽误很多时间.是否有好办法可以避免这个问题呢?有的,听说有一些豪车的车主就不担心这个问题.豪车一般配备两种钥匙:主钥匙和泊车钥匙.当你到酒店后,只需