OC坑集: 实例变量不需要 @synthesize
来源:互联网 发布:java collection接口 编辑:程序博客网 时间:2024/06/16 16:06
不知道从几何开始, OC 中可以只写 @property 不写 @synthesize 了.
虽然有点不习惯,但是用过之后觉得比较方便.
你需要知道, 写了@property 之后
1. 自动生成了_xxx这样的实例变量.
2. 如果你手动重写 setXXX 和 XXX 方法, 就不会为你自动生成 _xxx 实例变量了.
@interface Cat : NSObject@property (copy, nonatomic) NSString *name;- (void)echo;@end
Cat 具有实例变量 name 和一个实例方法 echo.
实现文件中,可以这样写
#import "Cat.h"@implementation Cat- (void)echo{ _name = @"XiaoHua"; NSLog(@"name = %@", _name);}@end
在外部可以通过点语法或者 setName 和 name 访问实例变量 _name.比如在 main.m 文件中
#import "Cat.h"int main(int argc, const char * argv[]) { @autoreleasepool { Cat *ct = [[Cat alloc] init]; [ct setName:@"HuaHua"]; NSLog(@"cat's name is %@", [ct name]); ct.name = @"XiaoHuaHua"; NSLog(@"cat's name is %@", ct.name); } return 0;}
切记必须是 setter 和 getter 都覆写了.
此时你会看到编译报错了, 报错信息就是找不到 _name 这个变量了.
解决这个问题的方法有很多, 这里推荐一个超级简单的方式.
修改 Cat.m 文件, Cat.h 文件不需要改动.
#import "Cat.h"@implementation Cat@synthesize name = _name;- (void)echo{ _name = @"XiaoHua"; NSLog(@"name = %@", _name);}- (void)setName:(NSString *)name{ //TODO}- (NSString *)name{ return _name;}@end
0 0
- OC坑集: 实例变量不需要 @synthesize
- 【OC学习-9】利用@property属性和@synthesize简化实例变量的存取器方法
- OC--语法变量声明synthesize和property
- @synthesize 指定实例变量赋值用法
- 为什么不需要写@synthesize
- OC之实例变量可见度
- OC 实例变量的可见度
- OC私有实例变量访问
- Oc属性 @property @synthesize
- OC语言--@porperty、@synthesize
- OC基础-Xcode+点语法+变量作用域+@property/@synthesize
- OC之点语法、成员变量作用域、@property和@synthesize
- OC语言学习 (三) 成员变量get/set方法和“.”语法,@proterty和@synthesize关键字
- OC核心语法(1)点语法、变量作用域、@property@synthesize和id
- OC基础---NSString、多文件开发、点语法、成员变量的作用域、@property和@synthesize
- OC语言学习 (三) 成员变量get/set方法和“.”语法,@proterty和@synthesize关键字
- OC中的点语法,成员变量,@property和@synthesize:id类型,构造函数
- 如何正确使用@synthesize(在有了自动合成属性实例变量之后,@synthesize还有哪些使用场景?)
- 5 Longest Palindromic Substring
- XTU 1237 计算几何
- scala---排序和累加
- hdu Largest prime factor
- linux文件系统操作
- OC坑集: 实例变量不需要 @synthesize
- code vs 1029 遍历问题 区间dp
- HDU Wooden Sticks (贪心)
- 技术评估
- 欢迎使用CSDN-markdown编辑器
- Yslow 23条规则
- 机房重构总结
- tomcat使用虚拟目录后报404
- 4.1 面积图