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;
}
复制代码