objective深浅拷贝

浅复制和深复制的区别?

浅复制:只复制指向对象的指针,而不复制引用对象本身。

深复制:复制引用对象本身。

意思就是说我有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的只不个是一个指针,对象本身资源还是只有一份,那如果我们对A_copy执行了修改操作,那么发现A引用的对象同样被修改了,这其实违背了我们复制拷贝的一个思想。深复制就好理解了,内存中存在了两份独立对象本身。

用通俗的话就是:

浅复制好比你和你的影子,你完蛋,你的影子也完蛋

深复制好比你和你的克隆人,你完蛋,你的克隆人还活着。

类别的作用?继承和类别在实现中有何区别?

category可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改。

并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。

类别主要有3个作用:

(1)将类的实现分散到多个不同文件或多个不同框架中。

(2)创建对私有方法的前向引用

(3)向对象添加分正式协议。继承可以增加,修改或者删除方法,并且可以增加属性。

类别和类扩展的区别:

category和extensions的不同在于 后者可以添加属性。另外后者添加的方法是必须要实现的。

extensions可以认为是一个私有的category。

objective-c的类可以多重继承吗?可以实现多个接口吗?category是什么?重写一个类的方式用继承好还是分类好?为什么?

objective-c的类不可以多重继承;可以实现多个接口,多继承在这里是用protocol委托代理来实现的,通过实现多个接口可以完成C++的多重继承;category是类别,用category去重写类的方法,仅对本category有效,不会影响到其他类与原有类的关系。

#import跟#include有什么区别,@class呢,#import<>跟#import”"又什么区别?

#import是objective-c导入头文件的关键字,#include是C/C++导入头文件的关键字,使用#import头文件会自动只导入一次,不会重复导入,相当于#include和#pragma once;@class告诉编译器某个类的声明,当执行时,才去查看类的实现文件,可以解决头文件的相互包含;#import<>用来包含系统的头文件,#import""用来包含用户头文件。

写一个setter方法用于完成@property(nonatomic,retain) NSString *name,

写一个setter方法用于完成@property(nonatomic,copy) NSString *name;

-(void)setName:(NSString *) str

{

[str  retain];

[name  release];

name  =  str;

}

-(void)setName:(NSString *) str

{  

id  t  =  [str  copy];

[name  release];

name = t;

}

你可能感兴趣的:(objective深浅拷贝)