黑马程序员技术交流社区

标题: 类分类在这种情况下.语法好使,指针指向却不能用为什么? [打印本页]

作者: 陨石    时间: 2014-11-8 07:34
标题: 类分类在这种情况下.语法好使,指针指向却不能用为什么?
  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那么是什么情况?
作者: doudou33420    时间: 2014-11-9 08:16
本帖最后由 doudou33420 于 2014-11-9 08:30 编辑

我试了一下  用property自动生成的 还真的不可以访问,但我定义一个private的 就可以访问了 按理说property生成的就是private啊

作者: shenlongfuhuo    时间: 2014-11-9 09:05
好像不行吧
作者: doudou33420    时间: 2014-11-9 09:14
本帖最后由 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, 下载次数: 23)

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





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2