@property详细解读
来源:互联网 发布:大嘴猴天鹅绒知乎 编辑:程序博客网 时间:2024/06/13 00:22
@property 这个关键字、学过iOS的一定会经常用、但是如果你问一个人、@property是干嘛用的? 可能就会有人一脸茫然地问你:”不就是声明属性用的么?” 。这话当然对、那么@property的背后的机制是什么?是如果声明属性?做了哪些事情呢?
在讨论@property这个关键字之前、我们先说下iOS中、是如何声明变量的。
iOS声明变量的方法
在ARC下、生命变量有两种比较常用的方法:
方法一:
@interface ViewController : UIViewController{ @public NSString *price1;}@end
方法二:
@interface ViewController : UIViewController@property (nonatomic, copy) NSString *price2;@end
ARC中、很多人应该都是使用方法二了、那么方法一和方法二有什么区别?
@property 是声明一个属性、而在大括号里面是声明一个成员变量。属性可以理解为对外暴露的成员变量、不仅内部可以使用、对外也是可以调用。(是的、即使你在.h中使用大括号中public声明、对外还是不可以引用这个变量)
在使用的过程中、两者也有区别、方法一的变量、可以直接使用
price1 = @"price1";
但是方法二的属性、就必须用self. 或者 _
self.price2 = @"price2";or_price2 = @"price2";
那么、是什么引起了这些不同呢?
答案是:@property会在编译过程、自动给属性增加getter 和 setter方法、从而使属性能够真正拥有属性的特性(被外部读取、使用self.读取)
生成setter 和getter 方法
刚才提到、@property的一个很重要的功能就是自动生成getter和setter方法。我们先看下代码。
这个最简单的getter 和setter方法
- (void)setPrice:(NSString *)price{ _price = price;}- (NSString *)price{ return _price;}
上面的方法看起来是没有问题的、但当我们理解了iOS的内存管理之后、很多人就会觉得不太对劲、如果这么写setter和getter方法、内存该乱套了吧。下面说明下property的另外一个用处:内存管理。
内存管理
当我们真正使用@property的时候、其实不会简单的使用
@property NSString *price;
常见的是
@property (nonatomic, copy)NSString *price;
copy等属性、是如何影响内存管理的呢?
如果是copy、setter方法就变成了
- (void)setterPrice:(NSString *)price { _price = [price copy];}
如此、我们就通过property的属性、实现了内存的管理
综上、property通过自动生成setter和getter方法、并且使用属性、实现了iOS的内存管理。
- @property详细解读
- Objective-C property详细解读
- ios-基础之【13】-iOS的@property的详细解读
- Part itemtype解读(1): Property
- s:property详细用法
- 详细解读java IO
- 详细解读statspack报告
- java详细解读
- makefile 详细解读
- sizeof详细解读
- Java API详细解读
- 详细解读 STATSPACK 报告
- 详细解读 STATSPACK 报告
- 详细解读_STATSPACK_报告
- uboot详细解读
- Ehcache详细解读
- free_page_tables图文并茂详细解读
- 命令模式详细解读。
- Oracle 11g 数据类型
- Android邮件发送详解 .
- 关于最近遇到的一些iOS面试题<2>答案来自网络
- Cloud Insight让bearychat更好玩!
- 扩大控件的点击区域
- @property详细解读
- C语言小结
- 初试Android基于Vuforia开发AR
- 新型PID控制及其应用
- python 示例:解释__name__ = "__main__"
- 手机淘宝
- 织梦如何去掉首页的后缀
- URL传递参数长度限制
- nginx源码初读(10)--让烦恼从数据结构开始(ngx_cycle)