Objective-C:三种文件导入的方式以及atomic和nonatomic的区别
生活随笔
收集整理的這篇文章主要介紹了
Objective-C:三种文件导入的方式以及atomic和nonatomic的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、三種文件導入的方式比較: ?
atomic:?設置成員變量的@property屬性時,默認為atomic,提供多線程安全。因為多線程的緣故,所有的對象在操作成員變量時都是同步的,因此,為了防止一個對象在操作數據時還沒有結束就被另一個對象搶走進行篡改,atomic為此提供了多線程安全機制,采用同步加鎖的方式,來控制進程的歸屬權。 ?? ?? 即: ? ? ? ? {lock} //第一個對象獲取操作數據后,給自己的進程加鎖,別人在我沒有釋放鎖之前就無法再去搶奪了。
? ? ? ? ? ? ? ? if (property != newValue) {?
? ? ? ? ? ? ? ? ?[property release];?
? ? ? ? ? ? ? ? ?property = [newValue retain];?
? ? ? ? ? ? ? ? ?}
? ? ? ? {unlock}//該對象操作完數據后,就釋放了同步鎖,別人就可以獲取這個數據進行自己的操作了。 ? 說明:鎖必須是唯一的。 ? nonatomic:?設置成員變量的@property屬性時,設置nonatomic,禁止多線程。這就直接消除了數據操作過程中被被另一方篡改的可能性。如果不是多線程,一般就采用這種設置。 ? ? ?
類的前項聲明@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的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sublime Package Cont
- 下一篇: Nagios监控之9:利用sendmai