ASC碼是最開始的編碼方式,用了7bit(0-127)來表示英文下的全部字符,固然如今ASC碼進行了擴展,如想知道具體能夠查看 百度百科,如今學習一下在代碼中表達字符的方式:ios
//'a'表示英文字符中a,這種字符是比較正常的字符,其次還有轉義字符'\n'
char a = 'a';
NSLog(@"char:%c", a); // a
//上面是使用字符自己形象來表達這個字符的,可是咱們也客戶使用數字來表示。若是用數字來表示咱們能夠使用十進制、八進制、十六進制。
char a = '\012';//八進制
char b = '\x12';//十六進制
char c = '\123';十進制
//錯誤的方式
char d = '123'; //這種方式是錯誤的,由於在字符表中沒有‘123’這樣的字符,這時候換成int類型。
複製代碼
計算strong ivar的佈局:class_getIvarLayout
git
計算weak ivar 的局部:class_getWeakIvarLayout
github
這兩個函數返回的值都是const uint8_t *
,能夠理解爲一個數組,數組中的元素類型是:uint8_t
【用8個bit位表示的非負數整數,由於第一位表示符號位,因此這個類型的取值範圍是:0-127】,咱們從數組中取出來每個uint8_t
元素,高四位表示爲非strong【weak】 的個數,低四位表示 strong【weak】 的個數。數組中用\x00
來表示結束位,這樣咱們能夠經過while循環來獲得strong【weak】的引用的下標。咱們獲取的下標都是class_copyIvarList
數組中的下標。數組
- (NSMutableIndexSet *)ivarLayout:(const uint8_t *)strongLayout {
NSMutableIndexSet *layout = [NSMutableIndexSet indexSet];
NSUInteger index = 0;
while (*strongLayout != '\x00') {
//非strong
uint8_t upper = (*strongLayout & 0xf0) >> 4;
//strong
uint8_t lower = (*strongLayout & 0x0f);
//獲得strong引用的初始index
index += upper;
//將strong的index,而且放在layout中
[layout addIndexesInRange:NSMakeRange(index, lower)];
//將index指向最後一位strong引用
index += lower;
//指針+1
strongLayout ++;
}
return layout;
}
複製代碼
代碼例子:bash
@interface Person : NSObject
{
__strong id name;
__weak id a;
__unsafe_unretained id c; //不計算在 weak layout
int g; //不計算在weak layout
__strong id h;
// _autoreleasing 不支持
//__autoreleasing id j;
}
複製代碼