藍懿ios技術交流和心得分享16 1 14

2021-07-09 11:25:14 字數 4416 閱讀 8649

c語言記憶體分析

一、進製

概念:進製是一種計數方式,是數值的表現形式

4種主要的進製:

①. 十進位制:0~9 

②. 二進位制:0和1

③. 八進位制:0~7

④. 十六進製制:0~9+a b c d e f

c語言在預設的情況下為十進位制。

int num=1010;//十進位制

int num=0b1100;//二進位制,以0b或者是0b開頭

int num=014;//八進位制,以0開頭

int num=0x4;//十六進製制,以0x開頭

佔位符:

%d和%i    :一十進位制整數的形式輸出乙個值

%o :以不帶符號的八進位制輸出

%x :以不帶符號的十六進製制輸出

%u :以不帶符號的十進位制輸出

%c : 輸出字元

%p : 輸出位址

%f : 輸出小數

%s : 輸出字串

n位二進位制的取值範圍:

2位···0~3   0~2的2次方-1

3位···0~7   0~2的3次方-1

n位···   0~2的n次方-1

判斷以下資料是否正確:

0x7h4 0986 .089 0b325 10e8.7 96f -.003 

型別的取值:

在64位編譯器下,int型別 佔4個位元組 共4x8=32bit char型別 佔1個位元組 共1x8=8bit ,在記憶體中以位元組為單位進行儲存。

二、記憶體分析

注意:記憶體定址,由大到小。

int a=1;

int b=2;

三、型別說明符

short== short int %d 2

long ==long int %ld 8

long long ==long long int  %lld 8

signed ==signed int==int %d 4(有符號)

unsigned ==unsigned int %u 4(無符號)

signed和unsigned的區別在於最高位要不要拿來作為符號位,顯然後者的取值範圍更大。這兩個說明符可和long等說明符組合使用,但不會改變位元組數。unsigned代表int型別的最高位,不必用來作為符號位。

四、位運算

(一)按位與 &

功能:只有對應的兩個二進位制位均為1時,結果才為1,否則為0。

示例:9&5 的結果為1

1001

0101 ——

0001

說明:如果位與上1則保留原值,與上0則為0。

應用:查詢0101 0111 0000的倒數第六位是0還是1,則可以與上數值以判斷,得出的結果是什麼,那麼它的原值就是什麼。

0101 0111 0000

0000 0010 0000

0000 0010 0000

(二)按位或 |

功能:只要對應的兩個二進位制位有乙個為1則結果為1,否則為0。

舉例:9|5的結果為13

1001

0101 ——

1101

(三)按位異或 ^

功能:當對應的兩個二進位制位不相等時,結果為1,否則為0。

舉例:9^5的結果為:12

1001

0101 ——

1100

規律:①. 相同整數異或的結果為0,如5^5=0

②. 順序可以交換。如9^5^9=9^9^5=0^5=5

③. 任何數值跟0進行異或,結果還是原來的數值。9^0=9

④. a^b^a==b

(四)按位取反 ~

舉例:~9的結果為-10

0000 0000  0000  0000 0000  0000  0000  1001

1111 1111 1111  1111  1111  1111 1111 0110

(五)左移 <<

如a<

把整數a的二進位制位全部左移n位,高位丟棄,低位補零。左移n位的結果其實是乘以2的n次方,由於符號位會被丟棄,所以結果可能會改變正負性。

舉例:9<<1的結果為18

0000 1001

0010 0010

應用:如果某個數需要乘以2的n次方,那麼使用位運算效率更高。

(六)右移 >>

如a>>n

把整數a的二進位制位全部右移n位,低位丟棄,符號位不變,一般情況下高位用符號位補齊。右移的結果實際上是除以2的n次方。

ios開發ui篇—calayer(自定義layer)

一、第一種方式

1.簡單說明

以前想要在view中畫東西,需要自定義view,建立乙個類與之關聯,讓這個類繼承自uiview,然後重寫它的drawrect:方法,然後在該方法中畫圖。

繪製圖形的步驟:

(1)獲取上下文

(2)繪製圖形

(3)渲染圖形

如果在layer上畫東西,與上面的過程類似。

**示例:

新建乙個類,讓該類繼承自calayer

yymylayer.m檔案

1//2

05-自定義layer(1)4//

5//6//

7//89

#import

"yymylayer.h"10

11@implementation

yymylayer

12//

重寫該方法,在該方法內繪製圖形

13 -(void

)drawincontext:(cgcontextref)ctx

1425

@end

在控制器中,建立乙個自定義的類

1//2

05-自定義layer(1)4//

5//6//

7//89

#import

"yyviewcontroller.h"10

#import

"yymylayer.h"11

12@inte***ce

yyviewcontroller ()

1314

@end

1516

@implementation

yyviewcontroller

1718 - (void

)viewdidload

1939

40@end

注意點:

(1)預設為無色,不會顯示。要想讓繪製的圖形顯示出來,還需要設定圖形的顏色。注意不能直接使用ui框架中的類

(2)在自定義layer中的-(void)drawincontext:方法不會自己呼叫,只能自己通過setneeddisplay方法呼叫,在view中畫東西drawrect:方法在view第一次顯示的時候會自動呼叫。

實現效果:

2.拓展

uiview中繪圖說明

1

#import

"yyview.h"2

3@implementation

yyview45

6 - (void

)drawrect:(cgrect)rect

7

說明:在uiview中繪製圖形,獲取的上下文就是這個view對應的layer的上下文。在渲染的時候,就是把圖形渲染到對應的layer上。

在執行渲染操作的時候,本質上它的內部相當於執行了 [self.layer drawincontext:ctx];

二、第二種方式

方法描述:設定calayer的delegate,然後讓delegate實現drawlayer:incontext:方法,當calayer需要繪圖時,會呼叫delegate的drawlayer:incontext:方法進行繪圖。

**示例:

1//2

06-自定義layer(2)4//

5//6//

78#import

"yyviewcontroller.h"9

@inte***ce

yyviewcontroller ()

10@end

1112

@implementation

yyviewcontroller

1314 - (void

)viewdidload

1535

36 -(void)drawlayer:(calayer *)layer incontext:(cgcontextref)ctx

3748

@end

實現效果:

注意點:不能再將某個uiview設定為calayer的delegate,因為uiview物件已經是它內部根層的delegate,再次設定為其他層的delegate就會出問題。

在設定**的時候,它並不要求我們遵守協議,說明這個方法是nsobject中的,就不需要再額外的顯示遵守協議了。

寫部落格第九十六天;​​

藍懿ios 技術交流和心得分享 12 9

一 用afnetwork檢測網路 afnetworkreachabilitymanager manager afnetworkreachabilitymanagersharedmanager manager startmonitoring manager setreachabilitystatusc...

藍懿 ios技術交流和心得分享12 31

明天就是元旦了 2016年啦 加油吧 明天你好!鍵盤監聽 import viewcontroller.h inte ce viewcontroller property nonatomic,strong ui end implementation viewcontroller void viewdi...

藍懿ios 技術內容和心得交流分享 11 8

今天上午講了tableviewcontroller的編輯,tableviewcontroller的中cell建立方式有三種 準備工作 通過把uitableviewcontroller的tableviewcontroller.h和tableviewcontroller.m檔案刪除,建立新的fiel繼承...