標籤:des blog c java http a
一、關鍵字說明
1、@synthesize:自動產生成員變數相應的存取方法,可以使用點文法操作該變數的存取。
2、@implementation: 表明類的實現 ,以@end 結束。
3、self :類似java語言當中的this ,是隱藏指標 指向接受訊息的對象的指標 。訊息所調用的方法使用該指標參數尋找它要使用的執行個體。
4、super : 調用父類的方法 。 self = [ super init]; 判斷是否可以成功初始化 如果父類成功初始化 那麼將會賦值給 self ,這樣self 是一個非Null 物件。 它不是參數也不是執行個體變數, 向super 發生訊息的時候,實際上是在請求oc向該類的超類 發送請求 ,如果超類中沒有定義的訊息,oc將按照繼承的普通規則在繼承鏈中進行尋找。
繼承當中隱藏指標isa 與 super關鍵字 兩張圖片來示範:
5、#imoprt 與c語言當中的#include有類似的作用 ,告訴前置處理器將標頭檔的內容包含到本檔案的.oc中 ,並且保證標頭檔只會被包含一次 。
6、@interface 聲明包含一個 XXX 類 ,與@implementation 一樣 ,以@end結束。
7、: 表示繼承 後面跟的是父類 。oc是單繼承的機制 ,這裡跟出c++是不一樣的。
8、@property 關鍵字 設定成員變數的屬性 (讀/寫 賦值 assign retain copy ,支援多線程的非原子訪問nonatomic)
二、 方法的聲明
1、 聲明一個方法 格式是:
-(傳回值)方法關鍵字 1 :(參數類型)參數名 方法關鍵字2 :(參數類型)參數名 …… (在讀方法的時候 ,找方法關鍵字來確定參數)
2、-號是執行個體方法 +號是類方法
3、另一個初始化的方法中 調用 已有的初始化方法 這種方法被稱為是 Designated initializer
三、輸出資料流
NSlog是OC中的標準輸出 ,附加輸出 當時的時間 應用程式的名稱 ,使用Nslog()輸出任意對象的值時 都會使用%@格式說明 ,在使用這個說明符時 對象通過調用一個名為description的方法提供自己的NSlog()格式
四、getter / settter 方法
對象.屬性:使用@property配合@synthesize 可以讓編譯器自動實現 getter/setter方法 ,很方便 可以直接使用”對象 屬性“的方法調用
對象.方法:如果想要調用”對象.方法“的方式來調用一個方法並擷取到方法的傳回值 需要使用@property配合@dynamic 使用@dynamic 關鍵字是告訴編譯器由我們自己來實現存取方法 。
五、屬性的設定
1、readonly 此標記說明屬性是唯讀 ,預設的標記是讀寫 ,如果指定了制度 在@implementation中只需要一個讀取器 或者你使用@synthesize關鍵字 ,也是有讀取器方法被解析 而且如果試圖使用點操作符 為 屬性賦值 ,那麼將會出現編譯錯誤。
2、readwrite 此標記說明屬性會被當成讀寫的 這也是預設的屬性 設定器和讀取器都需要在@implementation中實現 ,如果使用@synthesize關鍵字 讀取器和設定器都會被解析
3、nonatomic 非原子性訪問 對於屬性賦值的時候不加鎖 ,多線程並發訪問會提高效能,如果不加此屬性 則預設是兩個存取方法都為原子型事務訪問。
4、atomic 和 nonatomic用來決定編譯器產生的getter和setter是否為原子操作 ,atomic 設定成員變數的@property屬性時 預設為是atomic 提供安全執行緒 。在多線程環境下 ,原子操作是必要的 否則會引起錯誤的結果 。加了 atomic,setter函數會變成下面這樣:
{lock}
if(property != newValue){
[property release];
property = [newValue retain];
}
{unlock}
nonatomic 禁止多線程,變數保護 提高效能 。atomic 是OC 使用的一種線程保護技術 ,基本上來講 就是防止在 寫 未完成的時候 被另外一個線程讀取 ,造成資料錯誤。而這種機制是耗費系統資源的 ,所以在iPhone這種小型裝置上 如果沒有使用多線程間的通訊編程 那麼 nonatomic是一個非常好的 選擇。 訪問器是原子操作 ,這也就是說 在多線程環境下,解析的訪問器提供一個對屬性的安全訪問 ,從擷取器得到的傳回值或者通過設定器設定的值可以一次完成, 即便是別的線程也正在對其進行訪問。