ios開發的一些奇巧淫技1&2
cgfloat和float的區別?1
typedef cgfloat_type cgfloat;
這裡可以看到cgfloat是cgfloat_type的巨集定義,那麼這個又是什麼?
1
2
3
4
5
6
7
8
9
10
11
#if defined(__lp64__) && __lp64__
# define cgfloat_type double
# define cgfloat_is_double 1
# define cgfloat_min dbl_min
# define cgfloat_max dbl_max
#else
# define cgfloat_type float
# define cgfloat_is_double 0
# define cgfloat_min flt_min
# define cgfloat_max flt_max
#endif
這段話的意思就是,64位系統下,cgfloat是double型別,32位系統下是float型別.cgfloat能夠保證你的**在64位系統下也不容易出錯,所以你的**應該盡量使用cgfloat.儘管他可能造成一些多餘的消耗.不過能保證安全.
應該使用foundation_export還是#define來定義常量?
一般ios我們定義常量的方法有兩種,來看下面例子
我的.h檔案
1
2
foundation_export nsstring * const kmyconstantstring;
foundation_export nsstring * const kmyconstantstring2;
.m檔案是這樣定義的
1
2
nsstring * const kmyconstantstring = @
"hello"
;
nsstring * const kmyconstantstring2 = @
"world"
;
還有一種是常用的#define方法了
1
#define kmyconstantstring @"hello"
有什麼區別呢?
使用第一種方法在檢測字串的值是否相等的時候更快.對於第一種你可以直接使用(stringinstance == myfirstconstant)來比較,而define則使用的是這種.([stringinstance isequaltostring:myfirstconstant])
哪個效率高,顯而易見了.第一種直接比較的是指標位址,而第二個則是一一比較字串的每乙個字元是否相等.
static inline function是幹嘛的?
如果你的.m檔案需要頻繁呼叫乙個函式,可以用static inline來宣告,這相當於把函式體當做乙個大號的巨集定義.不過這也不是百分之百有效,到底能不能把函式體轉換為大號巨集定義來用要看編譯器心情,它要是覺得你的方法太複雜,他就不轉了.他直接呼叫函式.
類似這種簡單函式他肯定是樂意的.
1
static inline cgrect scalerect(cgrect rect, float n)
這到底是什麼鬼?static void *capturingstillimagecontext = &capturingstillimagecontext;
這種宣告方式常用於kvo,用來當做contenxt的key來新增.例如
1
[self addobserver:self forkeypath:@
"stillimageoutput.capturingstillimage"
options:(nskeyvalueobservingoptionold | nskeyvalueobservingoptionnew) context:capturingstillimagecontext];
這種宣告方式可以導致a method to create a unique pointer at compile time.在編譯的時候建立乙個唯一的指標.因為kvo的時候context如果不小心重複了,會發生奇怪的事情.用這種方式可以避免.
如何快速定位crash的位置?
選擇add exception breakpoint
最快速的提公升流暢度的方法?
用instrument找出所有不需要透明但是透明的view,layer.全部弄成不透明的.
選中profile
選中color
選擇我們最近風生水起的weibo客戶端
然後你會看見這些東西。
紅色或者深紅色的就是透明的層和view,他們就是拖慢你fps的罪魁禍首,如果不需要透明的就改掉.
乙個神奇的工具,accessorizer.
到底叼不叼,看圖就知道了.
我安裝的軟體
一 位運算的奇巧淫技
補充 異或,可以理解為不進製加法 1 1 0,0 0 0,1 0 1 性質 1 交換律,可任意交換運算因子的位置,結果不變 2 結合律 即 a b c a b c 3 對於任何數x,都有x x 0,x 0 x 4 自反性a b b a 0 a,連續和同乙個因子做異或運算,最終結果為自己 題1 找出唯...
演算法很美第一章 位運算的奇巧淫技
知識點 a a 0 a 0 a 乙個數與0進行按位異或,結果是他自己 對乙個序列進行按位異或,可以消除掉序列中的重複項,比如 a a b c c b 根據第1 2條規則 對乙個序列補一下,就可以將不重複的元素變成重複的元素,重複的元素變成不重複的,從而可以找到原本序列中重複項。比如原本是 a b c...
iOS開發的一些事
1.void load 和 id inittialize的區別 load是在乙個類最開始載入時呼叫,initialize是在應用中第一次呼叫該類或它的例項的方式之前呼叫。這兩個方法都是可選的,只有實現了才會被執行。load能夠保證在類初始化的時候就會被載入,這為改變系統行為提供了一些統一性。但 in...