在面向對象編程中,創建一個對象,肯定會包含其中的一些屬性,然後會為這些屬性寫上相應的set,get方法(就是通常我們講的設置器和訪問器)
一):通常意義上我們寫的屬性的set和get方法如下:創建對象,定義聲明屬性,然後手動編寫setXXX(),getXXX()方法,如下:Person對象
1:Person.h
// // Person.h // PersonGetSet // // Created by hmjiangqq on 14-1-22. // Copyright (c) 2014年 hmjiangqq. All rights reserved. // #import@interface Person : NSObject { //聲明一個變量 int myNumber; } -(int)myNumber; -(void)setMyNumber:(int)_number; -(void)printf; @end
2:Person.m
// // Person.m // PersonGetSet // // Created by hmjiangqq on 14-1-22. // Copyright (c) 2014年 hmjiangqq. All rights reserved. // #import "Person.h" @implementation Person -(int)myNumber{ return myNumber; } -(void)setMyNumber:(int)_number{ myNumber=_number; } -(void)printf{ NSLog(@"myNumber is %d\n",myNumber); } @end這個當屬性比較的少的時候還可以,如果一個對象的屬性非常多的時候,我們一個個去手動寫,會非常浪費開發時間,影響效率.所以在OC2.0版本之後出現了自動的設置器和訪問器.
下面我們來介紹一下OC中特有的設置和訪問器
2:簡化設置器和訪問器.注意兩個關鍵字@property,@synthesize
person.h
// // Person.h // PersonGetSet // // Created by hmjiangqq on 14-1-22. // Copyright (c) 2014年 hmjiangqq. All rights reserved. // #importperson.m@interface Person : NSObject { //聲明一個變量 int myNumber; } // 普通的get和set //-(int)myNumber; //-(void)setMyNumber:(int)_number; @property(nonatomic)int myNumer; //這樣聲明之後,會動態創建 -(void)printf; @end
// // Person.m // PersonGetSet // // Created by hmjiangqq on 14-1-22. // Copyright (c) 2014年 hmjiangqq. All rights reserved. // #import "Person.h" @implementation Person // 普通的get和set實現 //-(int)myNumber{ // return myNumber; //} //-(void)setMyNumber:(int)_number{ // myNumber=_number; //} @synthesize myNumer; -(void)printf{ NSLog(@"myNumber is %d\n",myNumber); } @end
二)在@property()括號中,可以填寫的屬性:
readwrite:默認
readonly: 只讀以為中麼有set方法
assign:默認,引用計數不增加
retain:引用計數增加1
原子性:actiomic 默認
非原子性:nonatomic