類和對象
類
在Object-c中類,其接口(interface)和實現(implementation)是分離開來的
類的聲明
@interface 類名:父類名{實例變量的定義;}方法聲明;...@end
類的實現
@implementation 類名方法定義...@end
對象
一個類提供對象的圖紙,然后創建這個類的對象
類名 對象名=[[類名 alloc]init];
訪問一個類的對象的屬性可以直接使用訪問成員運算符(.)
屬性和變量
屬性
屬性(property)指在接口文件中聲明實例對象到底有哪些屬性
屬性聲明的一些規則總結如下:
- 自動生成訪問方法
- 自動生成實例變量
- 更簡單地調用訪問方法(使用點操作符(.)完成)
- 屬性的內省(introspection):通過內省可以動態地查詢類中聲明的屬性以及屬性的名稱和類型
顯示聲明屬性
讓編譯器自動生成與數據成員同名的方法
@property int hitPoint;
相當于自動聲明了實例變量和讀寫方法,方便外部使用
屬性的實現
使用@synthesize,讓編譯器自動生成setter和getter方法
@synthesize hitPoint;
synthesize還有一個作用就是可以指定與屬性對應的實例變量,例如@synthesize myButton = xxx;那么self.myButton其實是操作的實例變量xxx,而不是_myButton了。
屬性指定的選項
@property 可用的選項
- 指定方法名(顯式指定getter和setter方法名)
- getter=getter 方法名
- setter=setter 方法名
- 讀寫屬性
- readonly(只讀)
- readwrite(讀寫)
- 賦值時的選項
- assign(單純賦值)
- retain(進行保持操作)
- unsafe_unretained(同assign一樣(用于ARC))
- strong(同retain一樣(用于ARC))
- weak(弱引用(用于ARC))
- copy(復制對象)
- 原子性操作
- nonatomic(非原子性操作、非線程安全)
屬性賦值時的選項
我們可以為可讀寫的@property設置選項,選項共有6種:assign,retain,unsafe_unretained,strong,weak和copy。選項之間是排他關系,可以不設置任何選項或只設置6種種的一種。根據所修飾的屬性是否是對象類型或者所采用的內存管理方式(手動計數,ARC)的不同,選項的意義也不同。
如表所示:
基礎數據類型 | 手動引用計數 | ARC | |
---|---|---|---|
未指定任何選項 | 直接賦值 | 警告 | 警告 |
assign unsafe_unretained | 直接賦值 | 直接賦值 | 直接賦值 |
retain strong | 出錯 | 賦值并對新值進行retain操作 | 賦值并對新值進行retain操作 |
weak | 出錯 | 無特別操作和assign相同 | 弱引用 |
copy | 出錯 | 賦值時建立傳入值的一份副本 | 賦值時建立傳入值的一份副本 |