OBJ-C ARC概念及原理+分类 学习笔记

来源:互联网 发布:软件测试经典案例 编辑:程序博客网 时间:2024/06/06 10:57
================================================================
                                           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类名()放在实现中可以作为定义私有变量和私有方法;



0 0