您的位置:首页 > 移动开发 > Objective-C

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类名()放在实现中可以作为定义私有变量和私有方法;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  objective-c 分类 ARC