第四天 記憶體管理 property引數

2021-07-04 14:32:36 字數 3786 閱讀 2927

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 :settergetter的方法都生成

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 ...

華為第四天

在第三天晚上下班的時候,終於搞定了第乙個專案內容,即使再簡單,我也勝利的喜悅,很欣慰,自己完成了乙個小小的任務,雖然比較簡單的乙個需求。在這種興奮的心情下,我結束了我第三天實習,我想生活始終要抱有一定的態度,是付出又收穫的喜悅,讓我們每個人都保持這種喜悅,來開始每一天的工作。第四天開始的時候,我先去...