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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

.h文件中的@property中有属性  相应的.m文件中, 为什么同时有set  get方法时,  会报错,必须重新定义实例变量才正确? 只留一个方法时也不重新定义实例变量时,不会报错啊 ?我彻底不记得MJ老师有讲过啊
部分代码实例如下所示:
  1. //Person.h中
  2. // Book是另一个类  表示人拥有书(组合)
  3. #import <Foundation/Foundation.h>
  4. #import "Book.h"  
  5. @interface Person: NSObject
  6.   @property Book *book;
  7. @end

  8. //Person.m中
  9. #import "Person.h"
  10. @implementation Person

  11. - (void)setBook:(Book *)book
  12. {
  13.    if(_book != book)
  14.   {
  15.      [_book release];
  16.      _book = [book retain];
  17.   }
  18. }
  19. @end
复制代码

6 个回复

倒序浏览
一般情况下,你都不写这两个方法@property会同时帮你生成getter和setter,
你重写set方法时,@property会自动帮你生成get方法;
你重写get方法时,@property会自动帮你生成set方法;
but……
你就是不能用了@property后再同时手写set方法和get方法了,这样的话,编译器通不过,别纠结,,
你问老师,老师也只能跟你说到这:Xcode编译器通不过,,
回复 使用道具 举报
是不是你同时写了两个方法,编译器就没有为你生成实例变量。只留一个还是会生成的。
回复 使用道具 举报
从今以后 发表于 2014-12-18 12:34
是不是你同时写了两个方法,编译器就没有为你生成实例变量。只留一个还是会生成的。 ...

是的。。。。
回复 使用道具 举报
se7ven 发表于 2014-12-18 12:05
一般情况下,你都不写这两个方法@property会同时帮你生成getter和setter,
你重写set方法时,@property会自 ...

:o:o看过你解释的好像明白了些什么   谢谢你了:)
回复 使用道具 举报
原因应该是,你重写了set和get方法的话,就会覆盖掉xcode自动生成的,所以相当于没有成员变量_book,不过也没关系,你只需要在.h文件中的@interface里面用{ Book *_book;}声明成员变量应该就可以吧
回复 使用道具 举报
自动生成了,只能重新写一个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马