类:是一种结构,它表示对象的类型,对象引用类来获取和本身有关的各种信息,特别是运行什么代码来处理每种操作。
对象:是一种结构,它包含值和指向其类的隐藏指针。
实例:对象的另一种称呼。
消息:是对象可以执行的操作,用于通知对象去做什么。对象接收消息后,将查询对应的类,以便查找正确的代码来运行。
方法:是为响应消息而运行的代码,根据对象的类,消息可以调用不同的方法。
接口:是对象的类应该提供特殊的特性的描述。
什么是property?
property是一种代码生成机制,能够生成不同类型的getter/setter函数,特别是如果你想要用点(.)操作符号来存取变量的话,你就能必须使用property。
如何使用?
用法如:@property (attribute1,attribute2) float value;
这些attribute包括:
readonly表示这个属性是只读的,就是只生成getter方法,不会生成setter方法。
readwrite可读可写(默认)设置可访问级别。
assign:简单赋值,不更改索引计数
copy:建立一个索引数为1的对象,然后释放旧对象
retain:释放(release)旧对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1
nonatomicnonatomic非原子性访问,不加同步,多线程并发访问会提高性能。注意,如果不加此属性,
则默认是两个访问方法都为原子型事务访问。
前两个只是简单的设定变量的可读写性。
详细解释:copy其实是建立了一个相同的对象,而retain不是:
比如一个NSString对象,地址为0x1111,内容为@"STR" ,copy到另外一个NSString之后,地址为0x2222,内容相同,新的对象retain为1,旧有对象没有变化。
旧有对象没有变化。
retain 到另一个NSString之后,地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1,也就是说,retain是指针拷贝,copy是内容拷贝。在拷贝之前,都会释放旧的对象。
assign:简单赋值,不更改索引计数(Reference Counting)。
copy:建立一个索引计数为1的对象,然后释放旧对象
retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的输入对象的索引计数为1
使用assign:对基础数据类型(NSInteger)和C数据类型(int ,float,double,char等)
使用copy:对NSString
使用retain:对其他NSObject和其子类。
阿里巴巴面试问到assign能否用NSObject类,我一直想它的指针是怎么指的,一时懵了。