Objective-C 学习笔记 11 - 属性Property
来源:互联网 发布:西门子数控仿真软件 编辑:程序博客网 时间:2024/05/16 14:27
上一节的Appliance.h中声明了2个成员变量productName和voltage。如果不使用属性机制@property,就需要用以下代码声明存取方法:
- (void)setProductName:(NSString *)s;- (NSString *)productName;- (void)setVoltage:(int)x;- (int)voltage;使用属性机制后,代码如下:
@property (copy) NSString *productName;@property int voltage;而Applicance.m就更为麻烦,不使用属性机制的实现如下:
- (void)setProductName:(NSString *)s{ productName = [s copy];}- (NSString *)productName{ return productName;}- (void)setVoltage:(int x){ voltage = x;}- (int)voltage{ return voltage;}而使用属性机制,则只有一句话:
@synthesize productName, voltage;在Objective-C中,当编译iOS程序或64位Mac OS X程序时,可以不用声明实例变量。@property/@synthesize指令能够自动创建相应数据所需的内存空间。
注释掉Appliance.h中的变量声明,程序可以照常执行。
@interface Appliance : NSObject{ //NSString *productName; //int voltage;}
属性的特性
存取类型
属性可以声明为readwrite或readonly,默认为readwrite
@property (readonly) int voltage;
生命周期类型
包括:unsafe_unretained, strong, weak和copy
unsafe_unretained是默认的类型,最为简单,存方法会将传入的值直接赋值给实例变量。非对象的实例变量都应该使用这种特性。
strong要求保留传入对象,并放弃原有对象,凡是只想对象的实例变量都应该使用strong特性。
weak特性要求不保留传入对象。相应的存方法会将传入的对象直接赋值给实例变量,如果该对象被释放,那么相应的实例变量会被自动赋为nil。
copy特性要求拷贝传入的对象,并将新对象赋值给实例变量。
@property (copy) NSString *lastName;@synthesize lastName;// 合成指令生成的代码等同于- (void)setLastName:(NSString *)d{ lastName = [d copy];}atomic与nonatomic,特性属于多线程编程的范畴。
KVC,key-value coding。让程序通过名称直接存取属性。这种方法常用于存取数据或者在使用CoreData存取数据时。如果输错了名称,编译器不会发出警告,但是在运行程序时会发生错误。
[a setProductName:@"Washing Machine"];// KVC写法[a setValue:@"Washing Machine" forKey:@"productName"];
0 0
- Objective-C 学习笔记 11 - 属性Property
- Objective-C 11 属性property
- Objective-C学习笔记 @property 参数说明
- Objective-C 学习笔记 08 - Property List
- property 学习[Objective C]
- Objective C 2.0 属性(Property)
- objective C property属性详解
- Objective C 2.0 属性(Property)
- objective-c语法学习:@property属性和点语法
- Objective-C基础学习_@property的所有属性详解
- object-c学习笔记:属性变量(property)
- 黑马程序员----Objective-C学习笔记之@property参数
- Objective-C 的property学习
- Objective-C 2.0属性(Property)介绍
- objective-c中property的属性
- Objective-C中@property属性使用
- 【Objective-C】@property的所有属性详解
- iOS Objective-C @property属性的用法
- linux kernel packet receive flow(内核封包处理流程)
- 添加#pragma-
- MLE, DT, MAP简谈
- OpenLayers访问WFS跨域问题(IIS)
- Linux内核数据包处理流程-数据包接收
- Objective-C 学习笔记 11 - 属性Property
- RDIFramework.NET ━ 9.14 数据库连接管理 ━ Web部分
- poj_2632
- POJ 2392 Space Elevator
- Search a 2D Matrix
- 栈建立,十进制转换为二进制
- android客户端向服务器通信的三种方式的使用
- 不安装Oracl 客户端登陆PLSQL 的方法
- 怎么清理c盘垃圾(有图教你c盘清理)