7. static const NSString *str 与 static NSString * const str 与 static NSString const *str 区别 ?
解答:static 只是代表静态变量,对着三种形式没有影响 。采用从右向左读的方式来区别它们。
const NSString *str : str 是一个指针,指向不可变的NSString 地址;
NSString * const str : str 十一个不可变的指针,指向NSString 地址;
NSString const * str : str 是一个指针,指向不可变的NSString 地址。
例:
NSString * const str = @"123" ;
str = @"345" ; // 错误,这是一个不可变的指针
const NSString * str = @"123" ;
str = @"345" ; //正确,指针可变
char c[5] ;
c[0] = 'a';
char d[5] ;
const char *s = c ;
s = d ; // 正确,指针可变
s[0] = 'a'; //错误,指向的内容不可变
6.Category不可以增加新的实例变量,但是可以增加属性。属性与实例变量的区别?
解答:声明属性可以指定一些特性,系统也会为我们自动生成setter/getter方法,和一个带下划线的同名实例变量。在Category中,增加的属性只会有setter/getter方法,不会增加实例变量。因为,在寻址的时候是按照偏移量来计算的,如果增加了实例变量,将会导致地址错误。