A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨勇 中级黑马   /  2014-4-28 10:51  /  1185 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨勇 于 2014-5-7 10:12 编辑

我知道类的分类可以访问原类的成员变量,但是有一个地方不太明白。类的成员变量有四种作用域:@public
@private @protected @package   因为是分类,但也仅仅是对类功能的扩展,那在分类中是否可以直接访问声明为@private的成员变量?因为@private的成员变量在子类的方法中是不能直接访问的,求指,谢谢~

评分

参与人数 1技术分 +1 收起 理由
脸皮猴 + 1

查看全部评分

4 个回复

倒序浏览
问的真是好。
刚刚我测试了下
用@private 申明的成员变量在分类中是可以直接访问的。
!!但是!!我发现用@property生成的成员变量在分类中是不能直接访问的!!我也有点想不明白,我记得MJ老师说过@property生成的成员变量也是@private 的,为什么自己定义的就可以直接访问而用@property生成的就不能直接访问?如下代码
  1. {
  2.   @private
  3.    int a;
  4. }
  5. @property(assign) int b;
复制代码


上面的两个成员变量,a和b都是@private的,为什么a能被分类直接访问,而b不行勒?求大神分析。。{:3_51:}
回复 使用道具 举报
会不会是这样@property(assign) int b;是系统自己添加的代码。生成的代码有声明,有实现但是,成员的定义也定义在.m文件里了? .m文件里可以声明变量的。不过默认就是private

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
脸皮猴 发表于 2014-4-28 11:17
问的真是好。
刚刚我测试了下
用@private 申明的成员变量在分类中是可以直接访问的。

猴哥,你这有点不地道了,他得问题是比较好回答,但是你得就不好回答了,我只能研究一下回答你得问题,然后等你给技术分了
回复 使用道具 举报
是这样的,首先回答楼主的问题,对于@private的变量在分类中是可以直接访问的。
但是通过@property方法生成的变量在分类中不是和直接通过{}直接声明的变量一样对待的,虽然都是@private的,但是处理不一样,官方推荐@property方法生成的方法,官方推荐点方法进行访问,譬如在分类中就可以通过点方法访问。
代码如下
  1. @property(nonatomic,assign) int hieght;
  2. //分类中访问,完全没错误
  3.    NSLog(@"heitght=%d",self.hieght);
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马