加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

实例变量问题上的objective-c – __block属性.

发布时间:2020-12-16 10:31:27 所属栏目:百科 来源:网络整理
导读:编译Objective-C类时遇到以下错误: VideoView.h:7: error: __block attribute can be specified on variables only 这里也是头文件的重要部分: #import UIKit/UIKit.h#import AVFoundation/AVFoundation.h@interface VideoView :UIView{@private __block A
编译Objective-C类时遇到以下错误:

VideoView.h:7: error: __block attribute can be specified on variables only

这里也是头文件的重要部分:

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
@interface VideoView :UIView{
@private
    __block AVPlayer *player;   
}
...

有没有解释为什么g认为我在非变量对象上应用__block属性?

解决方法

您不能在实例变量上使用__block,因为它完全没有必要.

即,当你这样做时:

^{
     someIvar = ....;
 }();

该块正在捕获对self的不可变的,保留的引用,并通过它间接引用iVar,因此__block不执行任何操作,因为该变量既不是const复制也不是readonly.

顺便说一下,这也是为什么在ARC下使用iVar时最终会出现“循环引用”警告的原因.

注意:在定义块语法时,我们试图想出一种表示这一点微妙的语法,但决定除非明显(没有),否则改进ARC环境和/或LLVM的内存管理分析静态分析仪使它不必要.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读