OC 中得block ^ 后面的返回值什么时候可以省略,什么时候不能省

2025-05-16 15:43:53
推荐回答(1个)
回答1:

NSInteger是可以省略的:
NSInteger (^myBlock)() = ^() {
return 2;
};这样写没有问题。
实际上返回值的省略不是一个值得成为问题的问题,报错了你就不省略就是了- -。。
关于__block,一般来说,在block内只能读取在同一个作用域的变量而且没有办法修改在block外定义的任何变量,此时若我们想要这些变量能够在block中被修改,就必须在前面挂上__block关键字。不过有一个限制就是传入的变量在内存中必须是一个占有固定长度内存的变量。
在拥有引用计数(reference-counted)的环境中,若我们在block中引用到Objective-C的对象,在一般的情况下它将会自动增加对象的引用计数,不过若以__block为修饰词的对象,引用计数则是不受影响。
如果我们在Objective-C的方法中使用block时,以下几个和内存管理的事是需要额外注意的:
l 若直接存取实例变量(instance variable),self的引用计数将被加1。
l 若透过变量存取实例变量的值,则只变量的引用计数将被加1。
实际上在ARC中,你根本不用担心上面的引用计数增加的问题,因为ARC会知道对象在什么时候引用计数加1了,ARC会帮你在适当的地方release的。