1.通常引用乙個類有兩種方法:
1,通過#import方法引入
2.通過@class引入
#import和@class的區別:
#import "b.h"
@inte***ce a:nsobject
@end
1.#import方式會包含被引用類的所有資訊,包括被引用類的變數和方法。@class方式只是告訴編譯器在a.h檔案中b *b只是類的宣告,具體這個類裡有什麼資訊,這是不需要知道,等實現檔案中真正用到的是否,才會去檢視b類中資訊。
2.使用@class方式由於只需要知道被引用類(b類)的名稱就可以了,而在現實類由於要用到被引用類中的實現變數和方法,所以在.m檔案中需要使用#import來包含被引用類的標頭檔案。
3.如果有些檔案一次被#import,那麼一旦最開始的標頭檔案稍有改動,後面引用到這個檔案的所有類都需要從新編譯一遍,這樣的效率也是可想而知的。而相對來講,使用@class凡是就不會出現這種問題。
4.記憶體管理_property引數:
(當乙個類中的成員變數中有很多的oc物件的是否,這時候對於物件之間的管理記憶體問題會很麻煩,特別是在setter方法裡面,這時候,編譯器就引入了property的retain引數,來進行管理記憶體。
1.retain:如果property裡面有retain引數,那麼編譯器在setter方法裡面,編譯器會自動加上,先release舊值,然後再retain新的值。所以,如果你在乙個類中定義的是基本資料型別如:@propertyintage。這時候不需要任何操作,其中已經包含assign操作(直接賦值),但是如果類中定義的是乙個oc物件,那麼你需要用retain如:@property (retain ) student *stu;
assign:預設型別,setter方法直接賦值,不進行retain操作。
readonly:只生成getter的方法
readwirte :setter和getter的方法都生成
copy:setter方法release舊值,再copy新值。
atomic:預設屬性:提供多執行緒安全。,代表給方法加鎖,保證執行緒安全(耗效能)
nonatomic,代表方法不需要考慮執行緒安全問題。
注意:基本上所有的屬性都是nonatomic型別,不需要考慮atomic,因為效能問題。
property裡面還可以指定setter和getter方法的名字,例如:@property(setter= setage,getter = getage) int age;這樣就指定了setter和getter方法:
5.自動釋放池:
是oc裡面的一種記憶體自動**機制,一般可以將一些臨時變數放到自動釋放池裡面去,統一**釋放
當自動釋放池銷毀的時候,池裡面的所有物件都會呼叫一次release方法:
oc物件只需要傳送一條autorelease訊息,就會把這個物件新增到最近的自動釋放池中,(棧頂的釋放池)
autorelease實際上只是把對release的呼叫延遲了,對於每一次autorelease,系統只是把該物件放入了當前autoreleasepool中,當該pool被釋放時,該pool中的所有物件會被呼叫release。
第四天 檔案管理
bin 二進位制 binary 在centos7上已經與 usr bin合併 usr bin 二進位制 sbin 在centos7上已經與 usr sbin合併 boot linux核心及啟動檔案 dev 各種裝置檔案 塊裝置 分割槽,硬碟裝置,塊裝置有快取 字元裝置 登陸終端,字元裝置無快取 et...
開課第四天
今天是開課的第四天,老師又講了很多知識 1 位運算 位運算的效能高,但是理解比較困難。1 按位與,兩個都是一才為一,兩個不一樣就為零。2 按位或,只要有乙個是一就是一。3 異或,不同為一,乙個數和另乙個數異或倆次還是它自己,乙個數和自身異或結果是零,乙個數和零異或結果還是它本身。對稱加密,解密。4 ...
華為第四天
在第三天晚上下班的時候,終於搞定了第乙個專案內容,即使再簡單,我也勝利的喜悅,很欣慰,自己完成了乙個小小的任務,雖然比較簡單的乙個需求。在這種興奮的心情下,我結束了我第三天實習,我想生活始終要抱有一定的態度,是付出又收穫的喜悅,讓我們每個人都保持這種喜悅,來開始每一天的工作。第四天開始的時候,我先去...