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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. @interface Person
  2. @property int age;
  3. @end

  4. #import "Person.h"
  5. @implementation Person
  6. @end

  7. #import "Person.h"
  8. @interface Person (sum)
  9. - (int)sumWithAge:(int)age1 andAge2:(int)age2;
  10. @end

  11. #import "Person+sum.h"

  12. @implementation Person (sum)
  13. - (int)sumWithAge:(int)age1 andAge2:(int)age2
  14. {
  15.     self.age = age2+age2;
  16.     NSLog(@"self.age:%d",self.age);
  17.     //出错,因为没有在类声明变量。
  18.     //_age = 0;
  19.     //age = 0;
  20.     //self->_age=0;
  21.     //self->age =0;
  22.     /*
  23.     self->age =age+age2;
  24.     return self->_age;
  25.      */
  26.     return self.age;
  27. }
  28. @end
复制代码



为什么类分类在这种情问下
可以用点,却不能用指针指向访问呢,我查看属性的时候干脆看不到成员变量,难道他不应该给我自动生成,就算自动生存了,private级别的应该也可以访问吧,我定义了一个private级别的成员变量,类分类时可以访问啊。。。如果不是private那么是什么情况?

评分

参与人数 1技术分 +1 收起 理由
星河鹭起 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 doudou33420 于 2014-11-9 08:30 编辑

我试了一下  用property自动生成的 还真的不可以访问,但我定义一个private的 就可以访问了 按理说property生成的就是private啊
回复 使用道具 举报
好像不行吧
回复 使用道具 举报
本帖最后由 doudou33420 于 2014-11-9 09:29 编辑

查了下百度 也没找到相关的资料
我觉得跟权限没关系应该是分类在调用这个变量的时候property还没有生成
那么就只有一个原因,  分类可以重写setAge和(get)age方法.
又因为set get 这两个方法一旦重写 那property 就不在会生成_age变量;


所以OC为了避免这种情况  直接限制在有分类的情况 必须自己书写变量 不能用property 这样就不会导致重写set get会让property失效了
你可以在正常情况下 写了property  然后在重写set get方法  你会发现找不到变量

屏幕快照 2014-11-09 上午9.26.53.png (65.06 KB, 下载次数: 26)

屏幕快照 2014-11-09 上午9.26.53.png

屏幕快照 2014-11-09 上午9.28.44.png (63.11 KB, 下载次数: 24)

屏幕快照 2014-11-09 上午9.28.44.png
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马