oop思想和 对象的拷贝
oop思想
OOP(Object Oriented Programming)是一种编程思想,将对象作为程序的基本单元,将程序和数据封装其中,用以提高软件的重用性、灵活性和扩展性。基本概 念中包括对象、类、数据抽象、继承、动态绑定、封装、多态、消息传递等。
面向对象的三大特性是:封装、继承和多态
1: 封装属性与细节、公开接口
2:oc只支持单继承(即只有一个父类,默认是NSobject)
3: 同一基类的不同子类可以通过重载父类的方法,实现不一样的功能。
对象的拷贝(copy):
1 会产生一个新的对象,对象的内容与源对象相同。
2 源对象与新对象使用不同的内存地址。
3需要实现NSCopying或者NSMutableCopying协议才能使用 复制功能
需要注意的时,新的引用计数是1.
copy返回的是不可变的对象。
mutablecopy 返回的是可变的对象。
浅拷贝只复制对象本身,而不会复制对象引用的其它对象
深拷贝除了复制对象本身,还会复制对象所引用的其它对 象
定义属性中的strong和copy关键字的差别。举例说明。
声明一个对象的属性。用途的关键字copy
@property(nonatomic,copy) NSMutableArray *books;
则系统自动生成的set方法是:
-(void)setBooks:(NSMutableArray *)books
{
_books=[books copy];/返回的是不可变对象
}
如果将copy改成strong,则系统自动生成的set方法是
-(void)setBooks:(NSMutableArray *)books
{
_books=self.books;//返回的对象是不是可变的,要看本身是可变的还是不可变的,例如这个books是NSMutableArray *,所以是可变的。
}
浅拷贝还是深拷贝是在
-(id)copyWithZone:(NSZone *)zone中看的。调用了copy函数则是深拷贝。
但是如果两个对象是不可变的,而且内容相同。那么系统可能会自动优化,将两个对象指向同一个地址。即用的是同一片内存空间。