iOS開發的一些奇巧淫技3

2021-06-28 18:13:41 字數 3747 閱讀 9624

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