標籤:
一、三種檔案匯入的方式比較:
類的前項聲明@class、import、include:
1、採用@class 類名的方式,它會告訴編譯器有這麼一個類,目前不需要知道它內部的執行個體變數和方法是如何定義的,後面會告你,現在你就可以直接使用它,節約程式編譯時間; 2、採用import方式,能避免重複匯入同一類,它匯入的不但這個類的所有的內容,而且使用它之前,編譯器必須先對類的所有內容走一遍,就是先做先行編譯處理,這樣比較耗費程式編譯的時間。 3、採用include方式,不能避免重複匯入的問題,但是它用在C/C++的代碼編寫中,因為#ifndef,#define,#endif這個是C/C++語言中的宏定義,通過宏定義避免檔案多次編譯。所以在所有支援C/C++語言的編譯器上都是有效,如果寫的程式要跨平台,最好使用這種方式。 說明:在OC代碼編寫時,如果在一個類聲明檔案.h中,需要另一個類時,使用前項聲明@class類名的方式是最好的選擇,因為它省略了代碼編譯的時間,提高了效率;但是在實現檔案.m檔案中必須要用import方式,因為實現檔案中要用到類的執行個體變數和方法,因此編譯器必須先提前對類的內容做先行編譯處理。 二、atomic和nonatomic的區別:
atomic: 設定成員變數的@property屬性時,預設為atomic,提供多安全執行緒。因為多線程的緣故,所有的對象在操作成員變數時都是同步的,因此,為了防止一個對象在操作資料時還沒有結束就被另一個對象搶走進行篡改,atomic為此提供了多安全執行緒機制,採用同步加鎖的方式,來控制進程的歸屬權。 即: {lock} //第一個對象擷取操作資料後,給自己的進程加鎖,別人在我沒有釋放鎖之前就無法再去搶奪了。
if (property != newValue) {
[property release];
property = [newValue retain];
}
{unlock}//該對象操作完資料後,就釋放了同步鎖,別人就可以擷取這個資料進行自己的操作了。 說明:鎖必須是唯一的。 nonatomic: 設定成員變數的@property屬性時,設定nonatomic,禁止多線程。這就直接消除了資料操作過程中被被另一方篡改的可能性。如果不是多線程,一般就採用這種設定。
Objective-C:三種檔案匯入的方式以及atomic和nonatomic的區別