zoukankan      html  css  js  c++  java
  • ARC指南3

     

     

     

    本章介绍引入ARC后@property的使用,跟ARC之前的还是很不一样的

     

    一、.h和.m文件的变化说明

    1.对于.h头文件,主要是将属性定义由retain变为strong

     


     
    1. @property (retain, nonatomic)  
    变为

     

    [java] view plain copy
     
    1. @property (strong, nonatomic)  

    2.在ARC之前,我们经常在.m中使用分类拓展来增加私有的property

     

     

    [java] view plain copy
     
    1. @interface MJViewController ()  
    2. @property (nonatomic, retain) NSArray *data;  
    3. @end  
    这样做主要是简化实例对象的手动内存管理,让property的setter方法自动管理原来对象的释放,以及新对象的retain。但是有了ARC,这样的代码就不再需要了。一般来说,仅仅为了简化内存管理,是不再需要使用property的,虽然你仍然可以这样做,但直接使用实例变量是更好的选择。只有那些属于public的实例变量,才应该定义为property

     

    我们可以直接在.m类实现中定义private实例变量,不必写分类拓展了:

     

    [java] view plain copy
     
    1. @implementation MJViewController {  
    2.     NSArray *data;  
    3. }  
    不过还是要在viewDidUnload方法中将data设置为nil,因为data是个strong指针,当不再使用一个对象时,应该设置为nil

     

    [java] view plain copy
     
    1. - (void)viewDidUnload {  
    2.     [super viewDidUnload];  
    3.     data = nil;  
    4. }  

    二、IBOutlet

     

    在ARC中,所有IBOutlet属性都推荐使用weak, 这些view对象已经属于View Controller的view hierarchy,不需要再次定义为strong。因此,这些定义为weak的IBOutlet属性都不需要在IBOutlet中设置为nil

     

    三、@property的修饰符小结

    • strong : 该属性值对应 __strong 关键字,即该属性所声明的变量将成为对象的持有者,等同于"retain"
    • weak : 该属性对应 __weak 关键字,与 __weak 定义的变量一致,该属性所声明的变量将没有对象的所有权,并且当对象被释放之后,对象将被自动赋值nil,记住IBOutlet应该使用weak
    • unsafe_unretained : 等效于__unsafe_unretaind关键字声明的变量,等同于之前的"assign",iOS 5之前的系统用该属性代替 weak 来使用
    • copy : 和之前的copy一样,复制一个对象并创建strong关联
    • assign : 对象不能使用assign,但原始类型(BOOL、int、float)仍然可以使用

  • 相关阅读:
    Android 项目结构图
    MySQL的简单使用
    MySql简易配置
    SQL Server 2008 R2 错误代码:233
    C#设置输入框只输入数字
    【学习笔记】JAva编程思想之多态
    【Java之对象清理】finalize()的用途
    【错误总结】java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor
    【学习笔记】Struts2之配置处理结果
    【学习笔记】Struts2之一个Action包含多个控制处理逻辑
  • 原文地址:https://www.cnblogs.com/LiLihongqiang/p/5527737.html
Copyright © 2011-2022 走看看