英语轻松读发新版了,欢迎下载、更新

请问这2个声明的实例变量用法有区别吗?

kyrr 发布于 2013年12月07日
无人欣赏。
#import "XYZViewController.h"

    @interface XYZViewController ()
    {
        int _Value1;
    }
    @end

    @implementation XYZViewController
    {
        int _Value;
    }
    。。。
    @end

请问这2个声明的实例变量用法有区别吗?

共10条回复
akunamotata 回复于 2013年12月07日

有区别吧,interface的变量是向外暴露的。。。

zhangmeteor 回复于 2013年12月07日

1楼 @akunamotata 这个interface是匿名范畴,也不暴露的啊

akunamotata 回复于 2013年12月07日

2楼 @zhangmeteor 额,好像interface里面不能声明变量吧。。。

zhangmeteor 回复于 2013年12月07日

3楼 @akunamotata 可以啊。。为啥不行呢?

kyrr 回复于 2013年12月08日

3楼 @akunamotata 可以的,你试一下就知道了。

nickel 回复于 2013年12月09日

一样的,没什么区别,后者好处是不暴露,但两个变量都是私有的。 但其实我比较倾向于在.m文件里加匿名category,再在这个category声明里用@property声明私有变量,因为可以直接利用到property自动生成的set/get方法,比较安全和统一。

yuzhouwww 回复于 2013年12月09日

6楼 @nickel 同意!.h只放向外部开放的属性和接口,我现在IBOutlet都拖到.m里面了

terryso 回复于 2013年12月09日

6楼 @nickel 他的第一个就是你说的在.m文件里加匿名category

kyrr 回复于 2013年12月09日

6楼 @nickel 既然都是私有的,不暴露是啥意思?

nickel 回复于 2013年12月09日

8楼9楼,哦,我没仔细看代码,确实是的,上面那个声明就是匿名category。所以上面两种声明方法都是没有“暴露性”的。

这两种声明我没发现有什么使用上的差别,但设计本意是有点差别的,毕竟上面那种是采用Category的形式,如果不使用Category又不想暴露变量声明,就用下面那种。我觉得这可能是objc演变过程中遗留下来多余的方法。

如果你大量采用匿名category的形式,下面那种方法就可以忽略,否则你就用下面那种。

登录 或者 注册