舉個列子:
@interface MyObject : NSObject
{
NSString *name;
NSInteger age;
}
/** name */
@property (strong, nonatomic) NSString *name;
@end
@implementation MyObject
@synthesize name;
@synthesize age = hehe;
@end
成員變量的聲明
{
NSString *name;
NSInteger age;
}
實例變量是成員變量的一部分,name 和age都是成員變量,但是它們是不同的,name是一個對象指針(前面帶*的),a又被稱之為實例變量,成員變量包含實例變量。
成員變量中除了b這樣的基本數據類型,其它的都是實例變量;
setter和getter方法
iOS中setter
方法給外界改變屬性值提供一個接口,getter
給外界訪問屬性值提供一個接口,通過setter
和getter
方法,對屬性值進行改變和查詢。在點語法中,點在左邊調用setter
方法,在右邊調用getter
方法。
@property屬性的聲明
/** name */
@property (strong, nonatomic) NSString *name;
@property用來聲明屬性變量,Xcode會自動生成一個標準的
setter
和getter
的聲明,同時生成一個NSString *_name
的屬性。
@synthesize屬性的實現
@synthesize name;
@synthesize age = hehe;
與@property相對,
@synthesize
是對@property
聲明的實現,自動生成一個name
屬性,Xcode自動實現setter
和getter
方法。
如果想要生成指定名字的成員變量,可以在@synthesize
屬性名后邊賦值一個你想要的成員變量的名字,在當前類中調用_age
,可以直接用hehe
代替
成員變量的可見性
一般情況下,如果屬性或者成員變量放在.h文件中,表示可以被外界訪問,放在.m文件中,表示是私有的變量。
還可以用下面的修飾詞來修飾屬性或者成員變量
@public @private @protected @package
1.@public 表示這個屬性是公開的,允許當前類、子類、外部都可以訪問;
2.@private 表示這個類私有的 只允許該類內部和該類的對象訪問,其它類和他的子類不累訪問。
3.@protected 表示只允許該類和該類的子類訪問。
4.@package 一般在框架中使用,框架內部相當于@protected,框架外部相當于@private。
@property的修飾詞
原子性(安全性)
|atomic|原子性 | 線程安全 |MAC端用的較多| 追求安全|
|:|:|:|:|
|nonatomic |非原子性 | 非線程安全|手機端應用較多 |追求性能|
權限
|readonly| 只讀 |不生成setter方法,只生成getter方法|
|:|:|:-|
| readwrite| 可讀可寫 | 生成setter和getter方法 系統默認|
修改方法名稱
getter 修改生成的getter方法的名稱
一般情況下,BOOL類型的屬性的getter方法是以is開頭的
setter 修改生成的setter方法的名稱
一般不去修改它
修飾詞(ARC)
strong(MRC用retain) release舊值 retain新值(適用于oc對象)
weak 成員變量是弱指針,對象釋放的時候,指針指向nil
assign 直接復制(默認,適用于非oc對象)
copy release舊值,copy新值 NSString類型
readWrite:同時生成setter和getter方法的聲明、實現
readonly:只生成getter方法的聲明、實現
setter 決定set方法的名字,需要加```:```
getter 決定get方法的名字,用于BOOL類型 ```is...```
<big>一個iOS學習路上的小學僧,歡迎指正!