objective-c的数据类型有NSString,NSNumber,NSArray,NSMutableArray,NSData等等,这些都是class,创建后便是对象,而C语言的基本数据类型int,只是一定字节的内存空间,用于存放数值;NSInteger是基本数据类型,并不是NSNumber的子类,当然也不是NSObject的子类。NSInteger是基本数据类型Int或者Long的别名(NSInteger的定义typedef long NSInteger),它的区别在于,NSInteger会根据系统是32位还是64位来决定是本身是int还是long.
id声明的对象有什么特性?
id声明的对象具有运行时的特性,即可以指向任意类型的objective-c的对象;
objective-c有私有方法吗?私有变量呢?
objective-c类里面的方法只有两种,静态方法和实例方法
在objective-c 中,所有实例变量默认都是受保护的,所有实例方法默认都是公有的
定义属性时,什么情况使用copy,assign,retain?
assige用于简单数据类型,如NSInteger,double,bool
retain和copy用于对象
copy用于当a指向一个对象,b也会想指向同样的对象的时候,如果用assign,a如果释放,再调用b会crash,如果用copy的方式,a和b各自有自己的内存,就可以解决这个问题。
retain 会使计数器加一,也可以解决assign的问题。另外:atomic和nonatomic用于决定编译器生成的getter和setter是否为原子操作。在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。
加了atomic,setter函数会变成下面这样:
if(property != newValue){
[property release];
property = [newValue retain];
}
类变量的@prtected,@private,@public,@package的声明各有什么含义
objective-c对存取权限的设定。也是变量的作用域。
protected 该类和所有的子类中的方法可以直接访问这样的变量,这是默认的。
private--该类中的方法可以访问这样变量,子类不可以。public--除了自己和子类中的方法外,也可以被其他类或者其他模块中的方法所访问。开放性最大。package--对于64位图像,这样的成员变量可以在实现这个类的图像中随意访问。
网友评论