iOS笔记:第十一篇 OC ARC的基本使用


  

1MRCARC

     MRC Manul Reference Counting (手动引用计数)

     ARC Automatic Reference Counting (自动引用计数)

        iOS 5以后,苹果提供的ARC机制

        ARC 是编译器特性,编译器在适当的时候,在我们写代码中插入内存管理代码

 2、强指针和弱指针

     强指针(强引用):

        默认情况下,所以的指针都是强指针(__strong

     

     弱指针(弱引用):(__weak

        不会影响对象的生命周期,对象的生死与弱指针没有关系

     

     ARC中内存管理原则:只要有强指针指向这个对象,这个对象就不会被销毁

                    只要没有强指针指向这个对象,这个对象就会立即被销毁

 

 3@property修饰符

 -> MRC 关于内存管理的修饰符

     assign 没有内存管理的代码(非OC对象,循环retain

     retain 有内存管理的代码(OC对象)

     copy   适用于NSString

  

 -> ARC下内存管理修饰符

     strong 相当于MRC中的retainOC对象,表示有一个强指针指向这个对象)

     weak   相当于MRC中的assignOC对象,表示有一个弱指针指向这个对象)

     assign 用于非OC对象(基本数据类型,枚举,结构体)

     copy   适用于NSString

 

 4、循环引用

     当对象之间的强引用构成环状,那么环内的所有对象都不能释放,这种情况下称为循环强引用

     

     解决方法:一端用strong 一端用weak

 

 5ARC注意点:

     在ARC下不能使用内存管理的代码(即不能调用retainreleaseautorelease

     在ARC下可以重写dealloc方法,但是在dealloc方法内部不能调用super deallic

     

     当一个对象作为方法的返回值的时候,系统会自动把这个对象放到自动释放池中

     当自动释放池被销毁的时候,对象被销毁

 

6Category (分类)

 ->作用:在不改变原有类的基础上扩展一个类的功能(方法)

 

 ->注意点:

     分类只能扩展方法,不能增加成员变量。

     分类中不能使用@property

     

     在一个类的分类中可以直接访问原来类的私有成员变量

     只有在.h文件中声明的成员变量才可以被访问

     通过@property生成的私有成员变量,不能在分类中直接使用,settergetter生成和实现是在.m文件中,可以通过self.成员变量 来调用

     

     在分类中增加的方法是可以被子类继承的,也就是说在分类增加的方法在它所有的子类中都可以使用

     不要在分类中增加与原有类同名的方法

        如果分类中有与父类同名的方法,那么就不会执行父类中实现的方法,而是执行分类中的方法

     扩充同一个类的不同的分类中也不要有同名的方法

        如果不同的分类中,有相同的方法,就会执行最后编译的那个分类的方法


 7、协议

    非正式协议:给NSObject增加一个只有声明没有实现的分类就是非正式协议

            谁需要这个方法,谁去实现这个方法

 

 8、类扩展

 格式:

 @interface 原来的类名 ()

 // 声明属性,成员变量,方法

 

 @end

 作用:为一个类增加私有属性,成员变量,方法

 

 9Block的基本使用

     Block是一种特殊的数据类型,与函数或方法类似,都是用来保存一段代码

     无论是方法还是函数他们都有

        返回值类型  方法(函数)名称 形参列表 方法或函数体

     Block也是由这几部分组成的

 -> 无参无返回值的Block

    定义变量

     格式:void (^block变量名称)();

     定义实现

     格式:^{

        语句;

        ...

     };

 

 -> 无返回值有参数的Block

 

    定义变量

     格式: void (^block变量名称)(参数类型 参数名称,...)

     定义实现

     格式:^(参数类型 参数名称,...){ 语句;...};

 

 -> 有参有返回值的Block

     定义变量

     格式: 返回值类型 (^block变量名称)(参数类型 参数名称,...)

     定义实现

     格式:^返回值类型 (参数类型 参数名称,...){ 语句;...};

 

 10、使用typedefBlock的使用步骤

    1)定义Block变量的语句拷贝到typedef后面,这个时候这个变量名称就是这种Block类型

    2)把原来的变量名称修改为我们想要的数据类型的名称

    3)就可以使用这个数据名称定义这种类型的变量

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值