ARC自动引用计数和分类

1. 对象自动释放池的使用

  • 释放池的作用
  • autorelease对象方法
  • @autoreleasepool关键字的使用
Person *p = [Person new]; 
@autoreleasepool{
[p autorelease];
}
  • 自动释放池的嵌套(栈方式来存储):自动释放池栈,存储多个自动释放池,对象每次加入到栈顶的自动释放池中
  • 封装一个initWithXxx方法, 在其中使用"对象自动释放池" * 释放池的作用
//快速创建类的类方法定义

+(instancetype)person{return [[[ self alloc] init] autorelease]; } Person *p = [Person person];

2. ARC介绍

  • ARC概念介绍
  • ARC的判断原则/强弱指针介绍
  • 循环strong问题
  • MRC代码转ARC代码

ARC项目如何兼容MRC的代码项目---> 编译选项 ---->双击类文件----> -fno-objc-arc 

  • MRC项目转换为ARC

3. Category分类

  • 分类的作用:
  1. 将一个类中的不同方法分到多个不同的文件中存储, 便于对类进行模块化设计、团队合作开发。 
  • 可以在不修改原来类的基础上, 为这个类扩充一些方法. 
  • 分类中只能增加"方法", 不能增加成员变量等。
//原类声明

@interface

Person:NSObject { int _age; }@end//原类实现@implementation Person { int_weight; //私有的成员变量 } -(void)setAge:(int)age{ } -(int)age{ }@end

//分类

@interface

Person (base)@property int age; //相当于给_age进行get和set方法的声明 @end

  • 分类可以访问原来类中的成员变量
  • 主类与分类中方法的调用优先级问题:
  1. 当分类与主类中都有同一个方法的时候, 优先调用分类中的方法。 
  • 当多个分类中都有同样的一个方法的时候, 优先调用最后一个参与编译的分类中的方法。
  • 非正式协议

方式: 通过分来来实现非正式协议原理: 就是给NSObject类添加分类来给其他类添加方法

应用:  NSString + countNumForString

  • 类扩展(匿名分类)
  1. 类扩展是写在.m文件中的, 为当前类扩展一些私有的成员. 1> 作用: 为某个类扩充一些私有的成员变量和方法. 延展也是为类定义私有方法的一种方式
  • "类扩展"对比"分类", 就少了一个分类名称, 因此也有人称它为"匿名分类".

4. block

  • block是一种数据类型, 可以使用这种数据类型定义变量, 并赋值。
  • block数据类型在使用前需要先定义该数据类型, 然后再使用(就像使用Person类一样, 先定义一个Person类, 然后再通过Person类声明一个Person类型变量)。 * block这种数据类型用来保存一个方法、函数、一段代码
  • 必须掌握: block的定义语法、使用场景
无参无返回值
void

(^变量名)(); 变量名 = ^(){ }; 或者变量名=^{ };

有参无返回值
有参有返回值
返回值类型 (^变量名) (参数列表);
变量名 = ^(){}
  • 使用inlineBlock辅助编写block代码
int

(^block)(int,int) = ^(int n, int m){};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值