ARC自动引用计数和分类

来源:互联网 发布:查看cnc程序软件 编辑:程序博客网 时间:2024/06/03 12:21

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
原创粉丝点击