IOS 學習筆記 2015-03-18,ios2015-03-18

來源:互聯網
上載者:User

IOS 學習筆記 2015-03-18,ios2015-03-18

Objective--C 一 關鍵字1 KVC  動態設值,動態取值,類似雨java中的反射,而且私人的照樣可以設定與擷取2 二 函數1 retain  給對象引用計數器 + 12 release 給對象引用計數器 - 13 dealloc 銷毀對象,當對象引起計數器為O時,自動調用該方法,4 autorelease 延遲釋放對象 5 setValue:forkey 設定對象屬性值(簡單)6 setvalue :forkeyPath 設定對象屬性值(複雜)7 valueForKey: 擷取對象屬性值 (簡單)8 valueForKeyPath 擷取對象屬性值(複雜)9 floatValue 字串轉flaot類型10 intValue 字串轉NSInteger類型三 規則 1 引用計數器 A 對象記憶體管理B 在OC中沒有垃圾自動回收機制,所以需要手動回收,所以用到了這個規則,其實在ObjC中記憶體的管理是依賴對象引用計數器來進行的:在ObjC中每個對象內部都有一個與之對應的整數(retainCount),叫“引用計數器”,當一個對象在建立之後它的引用計數器為1,當調用這個對象的alloc、retain、new、copy方法之後引用計數器自動在原來的基礎上加1(ObjC中調用一個對象的方法就是給這個對象發送一個訊息),當調用這個對象的release方法之後它的引用計數器減1,如果一個對象的引用計數器為0,則系統會自動調用這個對象的dealloc方法來銷毀這個對象。C 記憶體釋放的原則 誰建立,誰釋放D 關閉項目ARC 項目屬性—Build Settings--搜尋“garbage”找到Objective-C Automatic Reference Counting設定為No即可。2  自動釋放池A 在ObjC中也有一種記憶體自動釋放的機制叫做“自動引用計數”(或“自動釋放池”),與C#、Java不同的是,這隻是一種半自動的機制,有些操作還是需要我們手動設定的。自動記憶體釋放使用@autoreleasepool  關鍵字聲明一個代碼塊,如果一個對象在初始化時調用了autorelase方法,那麼當代碼塊執行完之後,在塊中調用過autorelease方法的對象都會自動調用一次release方法。這樣一來就起到了自動釋放的作用,同時對象的銷毀過程也得到了延遲(統一調用release方法)B  autorelease方法不會改變對象的引用計數器,只是將這個對象放到自動釋放池中;C 自動釋放池實質是當自動釋放池銷毀後調用對象的release方法,不一定就能銷毀對象(例如如果一個對象的引用計數器>1則此時就無法銷毀);D 由於自動釋放池最後統一銷毀對象,因此如果一個操作比較佔用記憶體(對象比較多或者對象佔用資源比較多),最好不要放到自動釋放池或者考慮放到多個自動釋放池;E ObjC中類庫中的靜態方法一般都不需要手動釋放,內部已經調用了autorelease方法;3 索引值編碼KVCA KVC的操作方法由NSKeyValueCoding協議提供,而NSObject就實現了這個協議,也就是說ObjC中幾乎所有的對象都支援KVC操作B 動態設定: setValue:屬性值 forKey:屬性名稱(用於簡單路徑)、setValue:屬性值 forKeyPath:屬性路徑(用於複合路徑,  例如Person有一個Account類型的屬性,那麼person.account就是一個複合屬性)C 動態讀取: valueForKey:屬性名稱 、vamlueForKeyPath:屬性名稱(用於複合路徑)D KVC使用起來比較簡單,但是它如何尋找一個屬性進行讀取呢?具體尋找規則(假設現在要利用KVC對a進行讀取):I   如果是動態設定屬性,則優先考慮調用setA方法,如果沒有該方法則優先考慮搜尋成員變數_a,如果仍然不存在則搜尋成員變數a,        如果最後仍然沒搜尋到則會調用這個類的setValue:forUndefinedKey:方法(注意搜尋過程中不管這些方法、成員變數是私人的還是公用的都能正確設定);    I  如果是動態讀取屬性,則優先考慮調用a方法(屬性a的getter方法),如果沒有搜尋到則會優先搜尋成員變數_a,如果仍然不存在則搜尋成員變數a,       如果最後仍然沒搜尋到則會調用這個類的valueforUndefinedKey:方法(注意搜尋過程中不管這些方法、成員變數是私人的還是公用的都能正確讀取);    I     E 無論對象的成員變數是私人還是公有,同樣可以動態設定,動態取值   

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.