iOS中@Property声明的属性同时重写getter和setter方法报错问题
2016-07-01 14:29
597 查看
在.h或者.m文件中用@property声明一个属性时。如果同时重写getter和setter方法,会报“该变量没有定义的错误”。如:
ViewController.h
ViewController.m
错误:Use of undeclared identifier ‘_num’.
解决办法:.m文件中需要加上:
原因:因为@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.
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.
相关文章推荐
- iOS动画(一)coreAnimation 教程(转)
- IOS中左右两侧导航栏的简单实现
- iOS plist文件操作
- Masonry简单的使用咧
- iOS/mac开发的一些知名个人博客
- ARC机制
- iOS Provisioning Profile(Certificate)与Code Signing详解
- iOS 开发 多线程详解
- iOS 多个tabBar之间跳转的问题
- [iOS Block] 视图A.B之间的回调实例
- IOS NSPredicate 查询、搜索
- iOS中的几种数据存储方式
- 如何在github下载开源项目到本地(Coding iOS 客户端为例)
- iOS 常用公共方法
- iOS开发——使用NSInputStream逐行读入大文件(2)
- 重新选择iOS-SDK
- iOS中的get,post同步民步请求
- iOS中alloc/init和new的区别
- iOS 键盘
- iOS外传——偷懒之路(1)