OBJ-C ARC概念及原理+分类 学习笔记
2016-05-08 02:48
555 查看
================================================================
ARC概念及原理+分类
================================================================
指针分类
1.强指针:默认的情况下,所有的指针都是强指针,关键字strong;
2.弱指针:_ _weak关键字修饰的指针;
声明如下:
_ _weak *p;
================================================================
ARC 判断准则:
只要没有强指针指向对象,对象就会被释放。
注意:当使用ARC的时候,暂时忘记“引用计数器”,因为判断标准变了。
----------------------------------------------------------
ARC下单对象内存管理
把强指针赋值为nil,若没有其他强指针指向对象,则弱指针会自动指向nil。
---------------------------------------------------------------
ARC下@property参数(面试!)
atomic,nonatomic;readwrite,readonly;这几个和MRC一样
MRC ARC
assign assign(用于基本数据类型)
retain strong(OC其他对象) weak(UI控件)
copy copy(一般用于NSString)
在ARC情况下解决"循环retain"的问题:@property一边用strong,一边用weak;
---------------------------------------------------------------
ARC特点总结
1.不允许调用release,retain,retainCount;
2.允许重写dealloc,但是不允许调用[super dealloc];
3.@property的参数...
--------------------------------------------------------------
ARC兼容非ARC的类
转变为MRC:-fno-objc-arc;
转变为ARC: -f-objc-arc;
================================================================
分类(Category)
=================================================================
分类的概念及作用
Category是OC特有的语法,其他语言没有的语法
作用:
1.在不修改原有的类的基础上增加新的方法;
2.一个庞大的类可以分模块开发;
3.一个庞大的类可以由多个人来编写,更有利于团队合作;
-------------------------------------------------------------
使用分类的目的:
1.对现有类的扩展;
2.作为子类的替代手段;(比如子类只能继承一个父类,满足不了需求)
3.对类中的方法归类;
------------------------------------------
使用步骤:
1.声明一个分类;
格式:
@interface 待扩展的类名(分类的名称)
@end
Person+base是规定的分类文件命名方法
如:
@interface Person (base)
-(void)run;
-(void)eat;
@end
2.实现这个分类;
@implementation Person (base)
-(void)run{}
-(void)eat{}
@end
3.使用分类中的方法;
和使用类是完全一样的操作:导入头文件,使用方法。
------------------------------------------------
分类的使用注意事项:
1.分类只能增加方法,不能增加成员变量;(也不能使用@property)
2.分类可以访问原来类中的成员变量;
3.如果分类和原来类出现同名的方法,优先调用分类中的方法;
4.如果出现不同分类中有同名方法的话,执行的是最后编译的那个;
(最后编译的分类 > 其他分类)
---------------------------------------------------------
(面试)分类非正式协议
给Foundation中NSObject类或者它的子类建立的分类。
----------------------------------------------------------
分类延展
类的延展的概念:延展类别又称为扩展(Extension)。
Extension是Category的一个特例,其名字为匿名(为空,就是在括号里什么都不写),并且新添加的方法一定要予以实现。(Category没有这个限制)
特点:
1.可以在延展中定义实例变量;
2.不能使用@implementation 类名() 实现类别的方法,就在原来类的@implementation里面实现;
3.把@interface类名()放在实现中可以作为定义私有变量和私有方法;
ARC概念及原理+分类
================================================================
指针分类
1.强指针:默认的情况下,所有的指针都是强指针,关键字strong;
2.弱指针:_ _weak关键字修饰的指针;
声明如下:
_ _weak *p;
================================================================
ARC 判断准则:
只要没有强指针指向对象,对象就会被释放。
注意:当使用ARC的时候,暂时忘记“引用计数器”,因为判断标准变了。
----------------------------------------------------------
ARC下单对象内存管理
把强指针赋值为nil,若没有其他强指针指向对象,则弱指针会自动指向nil。
---------------------------------------------------------------
ARC下@property参数(面试!)
atomic,nonatomic;readwrite,readonly;这几个和MRC一样
MRC ARC
assign assign(用于基本数据类型)
retain strong(OC其他对象) weak(UI控件)
copy copy(一般用于NSString)
在ARC情况下解决"循环retain"的问题:@property一边用strong,一边用weak;
---------------------------------------------------------------
ARC特点总结
1.不允许调用release,retain,retainCount;
2.允许重写dealloc,但是不允许调用[super dealloc];
3.@property的参数...
--------------------------------------------------------------
ARC兼容非ARC的类
转变为MRC:-fno-objc-arc;
转变为ARC: -f-objc-arc;
================================================================
分类(Category)
=================================================================
分类的概念及作用
Category是OC特有的语法,其他语言没有的语法
作用:
1.在不修改原有的类的基础上增加新的方法;
2.一个庞大的类可以分模块开发;
3.一个庞大的类可以由多个人来编写,更有利于团队合作;
-------------------------------------------------------------
使用分类的目的:
1.对现有类的扩展;
2.作为子类的替代手段;(比如子类只能继承一个父类,满足不了需求)
3.对类中的方法归类;
------------------------------------------
使用步骤:
1.声明一个分类;
格式:
@interface 待扩展的类名(分类的名称)
@end
Person+base是规定的分类文件命名方法
如:
@interface Person (base)
-(void)run;
-(void)eat;
@end
2.实现这个分类;
@implementation Person (base)
-(void)run{}
-(void)eat{}
@end
3.使用分类中的方法;
和使用类是完全一样的操作:导入头文件,使用方法。
------------------------------------------------
分类的使用注意事项:
1.分类只能增加方法,不能增加成员变量;(也不能使用@property)
2.分类可以访问原来类中的成员变量;
3.如果分类和原来类出现同名的方法,优先调用分类中的方法;
4.如果出现不同分类中有同名方法的话,执行的是最后编译的那个;
(最后编译的分类 > 其他分类)
---------------------------------------------------------
(面试)分类非正式协议
给Foundation中NSObject类或者它的子类建立的分类。
----------------------------------------------------------
分类延展
类的延展的概念:延展类别又称为扩展(Extension)。
Extension是Category的一个特例,其名字为匿名(为空,就是在括号里什么都不写),并且新添加的方法一定要予以实现。(Category没有这个限制)
特点:
1.可以在延展中定义实例变量;
2.不能使用@implementation 类名() 实现类别的方法,就在原来类的@implementation里面实现;
3.把@interface类名()放在实现中可以作为定义私有变量和私有方法;
相关文章推荐
- nodejs实现获取某宝商品分类
- php通过分类列表产生分类树数组的方法
- asp飞飞无限级分类v1.0 Asp+sql+存储过程+ajax提供下载
- Oracle表的分类以及相关参数的详解
- Objective-C的内省(Introspection)用法小结
- Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
- WordPress中用于获取文章信息以及分类链接的函数用法
- 详解WordPress中分类函数wp_list_categories的使用
- php实现无限级分类查询(递归、非递归)
- PHP实现无限级分类(不使用递归)
- PHP实现递归无限级分类
- Jquery+Ajax+PHP+MySQL实现分类列表管理(下)
- JavaScript在网页中画圆的函数arc使用方法
- php+mysql实现无限分类实例详解
- thinkphp实现无限分类(使用递归)
- WordPress中获取指定分类及其子分类下的文章数目
- 详解WordPress开发中用于获取分类及子页面的函数用法
- JavaScript+CSS无限极分类效果完整实现方法
- Objective-C中常用的结构体NSRange,NSPoint,NSSize(CGSize),NSRect实例分析
- Objective-C中使用NSString类操作字符串的方法小结