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 類是一組具有相同 特徵 屬性...