OC語言收穫

2021-07-23 20:31:31 字數 3017 閱讀 9629

1.copy型別的屬性

@property

(nonatomic

,copy

)nsstring

*text;

_text

= [text

copy

];//生成的copy型別的屬性

這樣複寫setter方法更嚴謹

2._weak:

宣告為weak的指標,指標指向的位址一旦被釋放,這些指標都將被賦值為nil。

3.oc中定義的全域性變數未初始化時值會預設為0 區域性變數隨機

4.super是個識別符號 從父類的方法列表中開始查詢方法 其本質依舊是self

5.nsdictionary字典中key可以是不同型別的物件

6.nsstring中 == 比較的是記憶體位址 ,不可變陣列中系統優化內容相同的字串存到同個字串常量區

7.協議:協議中不能定義屬性 用id《協議名》接收引數

8.對於nsstring型別必須使用copy的原因:

對源頭是nsmutablestring的字串,retain僅僅是指標引用,增加了引用計數器,這樣源頭改變的時候,用這種retain方式宣告的變數(無論被賦值的變數是可變的還是不可變的),它也會跟著改變;而copy宣告的變數,它不會跟著源頭改變,它實際上是深拷貝。

對源頭是nsstring的字串,無論是retain宣告的變數還是copy宣告的變數,當第二次源頭的字串重新指向其它的地方的時候,它還是指向原來的最初的那個位置,也就是說其實二者都是指標引用,也就是淺拷貝

9.淺複製與深複製之間的區別 這篇部落格有深入分析

retain

:始終是淺複製。引用計數每次加一。返回物件是否可變與被複製的物件保持一致。

copy

:對於可變物件為深複製,引用計數不改變 已經生成了乙個新的不可變的物件(所以不用retain);對於不可變物件是淺複製,

引用計數每次加                        一。始終返回乙個不可變物件。

mutablecopy

:始終是深複製,引用計數不改變。始終返回乙個可變物件。

10.mrr和arc相互引用解決辦法:

mrr:設定其中乙個為assign 另乙個retain

arr:設定其中乙個為__weak 另乙個為__strong

**delegate必須設定為__weak

如果**類裡將被**類作為屬性,使用__strong會導致相互引用

11.如果想要將arc型別的和mrr型別的匯入到同乙個工程,那麼

非arc標記-fno-objc-arc

arc標記-fobjc-arc

12.setvalue:forkey:(kvc)預設的搜尋順序

kvc從receiver([receiver massage])的類中查詢訪問方法set

如果set未找到,且receiver的類方法accessinstancevariablesdirectly返回yes,則receiver依次搜尋名字為_, _is, , is,的例項變數,注意搜尋順序。

如果找到了訪問方法或者例項變數,則利用其設定對應的value。

如果既沒有搜尋到訪問方法,也沒有找到例項變數,則receiver會呼叫 setvalue:forundefinedkey: 方法

當kvc取到的key值沒有對應的value值可以賦值時 系統會自動呼叫此方法 通過重寫此方法 可以防止程式崩潰

- (void

)setvalue:(

id)value forundefinedkey:(

nsstring

*)key

13.kvc可以給屬性的屬性賦值 或者給私有屬性賦值

14.kvo注意的點:

1. kvo

必須要有呼叫

setter

方法才會被觀察者觀察到 否則不會觸發

2.  kvo無法觀察系統提供的物件

3. 觀察者kvo自動呼叫的方法會在子執行緒呼叫如果 此方法中需要重新整理ui介面時 需要重新回到主線程(多執行緒下kvo需要注意的點)

- (void

)observevalueforkeypath:(

nsstring

*)keypath ofobject:(

id)object change:(

nsdictionary

<

nsstring

*,id

> *)change context:(

void          

*)context ;

15.用 for-in 去遍歷容器時的底層實現:

nsarray,是按照陣列 index 的順序來遍歷。

nsdictionary,是通過遍歷字典的 keys 陣列,再通過 valueforkey: 來獲取 value。

nsset,是無序的。

16.字典中取值最好使用objectforkey

一般來說 key 可以是任意字串組合,如果 key 不是以 @ 符號開頭,這時候 valueforkey: 等同於 objectforkey:,如果是以 @ 開頭,去掉 key 裡的 @ 然後用剩下部分作為 key 執行 [super valueforkey:]

17.陣列系統排序底層實現:氣泡排序

[_fontnames

sortedarrayusingcomparator

:^nscomparisonresult(

id_nonnull

obj1,

id_nonnull obj2) ];

18.陣列一般使用lastobject 取其中隨便乙個元素 此時

如果陣列為空 使用lastobject 不會崩潰 因為裡面有trycash

19.定時器方法使用:

注意:停止後,一定要將timer賦空,否則還是沒有釋放。

20.將整形資料轉換成字串的快速方法[@(

live.

onlineusers

)stringvalue]

OC語言 OC語言基礎 類

1 oc檔案的擴充套件名為.m c 2 oc語言完全相容 c語言,即 oc語言中可以寫 c語言 3 oc語言也可以寫 c 語言,但是如果要寫 c 語言,則 oc擴充套件名為 mm 4 oc語言是在 c語言的基礎上增加了最小層的物件導向語言 型別oc語言 c語言關鍵字 基本上所有的都以 開頭 publ...

OC語言 OC語言基礎 類

一 oc語言基礎 1 oc檔案的擴充套件名為.m c 2 oc語言完全相容c語言,即oc語言中可以寫c語言 3 oc語言也可以寫c 語言,但是如果要寫c 語言,則oc擴充套件名為.mm 4 oc語言是在c語言的基礎上增加了最小層的物件導向語言 二 oc語言與c語言 三 1.import 與 incl...

oc基礎語言

基 礎 語 法 objective c是c語言的母集合,就是物件導向的。1 物件導向和面向過程 物件導向和面向過程是程式設計的兩種思考方式。物件導向,簡稱oop,是完成一項工作需要那些步驟。面向過程,簡稱opp,是完成工作的每一步是怎麼完成的,注重過程。2 類和物件 1 類是一組具有相同 特徵 屬性...