您的位置:首页 > 移动开发 > IOS开发

iOS中@Property声明的属性同时重写getter和setter方法报错问题

2016-07-01 14:29 597 查看
在.h或者.m文件中用@property声明一个属性时。如果同时重写getter和setter方法,会报“该变量没有定义的错误”。如:

ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (nonatomic, assign) NSInteger num;

@end


ViewController.m

-(NSInteger)num
{
return _num;
}
- (void)setNum:(NSInteger)num
{
_num = num;
}


错误:Use of undeclared identifier ‘_num’.

解决办法:.m文件中需要加上:

@synthesize propertyName = _propertyName;


原因:因为@property默认给该属性生成getter和setter方法,当getter和setter方法同时被重写时,则系统就不会自动生成getter和setter方法了,也不会自动帮你生成_num变量,所以不会识别。

小知识:声明的property如果没有特意指定synthesize的话,那么Objective-C就会自动的给你声明一个_开头的实例变量。

_xxx访问的是xxx的地址。self.xxx访问的是xxx的getter。这两者并不是完全等价的,self.xxx是用objc_msgSend发消息,_xxx或者self->xxx则是直接访问内存地址,一般建议在init里面用_xxx,其他地方用self.xxx.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: