黑马程序员技术交流社区
标题:
分类访问成员变量的问题
[打印本页]
作者:
杨勇
时间:
2014-4-28 10:51
标题:
分类访问成员变量的问题
本帖最后由 杨勇 于 2014-5-7 10:12 编辑
我知道类的分类可以访问原类的成员变量,但是有一个地方不太明白。类的成员变量有四种作用域:@public
@private @protected @package 因为是分类,但也仅仅是对类功能的扩展,那在分类中是否可以直接访问声明为@private的成员变量?因为@private的成员变量在子类的方法中是不能直接访问的,求指,谢谢~
作者:
脸皮猴
时间:
2014-4-28 11:17
问的真是好。
刚刚我测试了下
用@private 申明的成员变量在分类中是可以直接访问的。
!!但是!!我发现用@property生成的成员变量在分类中是不能直接访问的!!我也有点想不明白,我记得MJ老师说过@property生成的成员变量也是@private 的,为什么自己定义的就可以直接访问而用@property生成的就不能直接访问?如下代码
{
@private
int a;
}
@property(assign) int b;
复制代码
上面的两个成员变量,a和b都是@private的,为什么a能被分类直接访问,而b不行勒?求大神分析。。{:3_51:}
作者:
戴文婷
时间:
2014-4-28 16:24
会不会是这样@property(assign) int b;是系统自己添加的代码。生成的代码有声明,有实现但是,成员的定义也定义在.m文件里了? .m文件里可以声明变量的。不过默认就是private
作者:
D调的沉默
时间:
2014-4-28 20:10
脸皮猴 发表于 2014-4-28 11:17
问的真是好。
刚刚我测试了下
用@private 申明的成员变量在分类中是可以直接访问的。
猴哥,你这有点不地道了,他得问题是比较好回答,但是你得就不好回答了,我只能研究一下回答你得问题,然后等你给技术分了
作者:
D调的沉默
时间:
2014-4-28 20:41
是这样的,首先回答楼主的问题,对于@private的变量在分类中是可以直接访问的。
但是通过@property方法生成的变量在分类中不是和直接通过{}直接声明的变量一样对待的,虽然都是@private的,但是处理不一样,官方推荐@property方法生成的方法,官方推荐点方法进行访问,譬如在分类中就可以通过点方法访问。
代码如下
@property(nonatomic,assign) int hieght;
//分类中访问,完全没错误
NSLog(@"heitght=%d",self.hieght);
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2