@property, @sythesize,@dynamic
来源:互联网 发布:淘宝代购点什么意思 编辑:程序博客网 时间:2024/06/05 13:24
@property(属性): 声明setter
和getter
方法
@synthesize(合成): 根据@property
声明的属性生成实例变量,并自动实现setter
和getter
方法
@dynamic:告诉编译器不生成实例变量、getter
和setter
方法
1.最常用的方法,只使用@property
//.h@interface ViewController : UITableViewController@property (nonatomic, copy) NSString *name; //声明一个属性@end//.m@implementation ViewController//不需要显示声明@synthesize, xcode会自动调用@synthesize,根据声明的name属性,自动生成_name变量- (void)viewDidLoad { [super viewDidLoad]; self.name = @""; //setter方法已自动实现 _name = @"艾玛"; //_name已自动生成 NSLog(@"_name:%@", self.name); //打印结果_name:艾玛,说明_name 即属性name的实例变量}@end
2.显示声明@synthesize
//.h@interface ViewController : UITableViewController@property (nonatomic, copy) NSString *name; //声明一个属性@end//.m@implementation ViewController@synthesize name; //对name属性生成实例变量name, 并生成setter和getter方法- (void)viewDidLoad { [super viewDidLoad]; self.name = @""; //setter方法已自动实现 name = @"艾玛"; //_name已自动生成 NSLog(@"self.name:%@", self.name); //打印结果self.name:艾玛,说明name 即属性name的实例变量}@end
3.显示声明@synthesize
和不显示声明@synthesize
对生成变量名的区别
通过上面1和2的对比,会发现不声明@synthesize时,系统自动生成的变量名比属性名多了个_(下划线)
4.显示关联实例变量和属性名称
//.h@interface ViewController : UITableViewController @property (nonatomic, copy) NSString *name;@end//.m@implementation ViewController@synthesize name = _name; //关联实例变量_name到属性name上,即属性name生成的实例变量名为_name- (void)viewDidLoad { [super viewDidLoad]; self.name = @""; _name = @"艾玛"; NSLog(@"self.name:%@", self.name);//打印结果self.name:艾玛,说明_name 即属性name的实例变量}@end
5.@dynamic
的使用
//.h@interface ViewController : UITableViewController @property (nonatomic, copy) NSString *name;@end//.m@implementation ViewController@dynamic name; //通知编译器不要自动生成实例变量,setter和getter- (void)viewDidLoad { [super viewDidLoad]; self.name = @""; //此处没有错误提示, 因为@property声明了setter和getter方法,只是没有实现 _name = @"艾玛"; //这里会有错误提示,如下图所示 NSLog(@"self.name:%@", self.name);}@end
6.最后加一个小尝试,@dynamic
和@synthesize
同时使用会怎么样?直接上图吧
ps:在著名的《招聘一个靠谱的 iOS》的参考答案中指出,@property = ivar + getter + setter;
个人感觉稍微欠妥,也可能是我理解错误,还请大家指正!
0 0
- @property, @sythesize,@dynamic
- 学习笔记--@property和@sythesize,方法重写及回顾
- Perl dynamic property, method
- @property @synthesize @dynamic
- property ,synthesize,dynamic
- @property中的@synthesize/@dynamic 区别
- property synthesize dynamic 的区别
- 属性, 变量,@property,@synthesize,@dynamic
- 2.属性详解(@property/@dynamic/@synthesize)
- OC基础-@property,@synthesize和@dynamic 16
- iOS @property、@synthesize和@dynamic分别是什么
- copy, retain, assign , readonly , readwrite, nonatomic、@synthesize、@property、@dynamic
- copy, retain, assign , readonly , readwrite, nonatomic、@synthesize、@property、@dynamic
- copy, retain, assign , readonly , readwrite, nonatomic、@synthesize、@property、@dynamic
- OC中的@property、@synthesize和@dynamic的用法
- dynamic
- @dynamic
- Dynamic
- C#159课的主要内容
- selenium常用资源的阿里镜像链接
- 指针、数组和字符串
- android 可以用来写代码的代码(JavaPoet)
- Oracle数据库:实例、用户、表、表空间
- @property, @sythesize,@dynamic
- [编程之美-03]字符串移位包含的问题
- CocoaPods(如有雷同请联系立删)
- HDU 1074 Doing Homework「状压dp」
- selenium switch_to.frame
- awk中使用shell中的变量
- IO总结
- 加载本地图片的几种方式和区别
- Linux软件包安装(rpm、yum、apt-get)