ARC
    自动引用计数
ARC不是垃圾回收,而是编译器自动插入代码来减少程序员的代码输入和失误。
    同时比垃圾和效率要高,因为其不影响运行时间,相当于自己管理内存。
   
总是通过属性来管理实例变量(init/dealloc除外),在dealloc中释放所有属性。 dealloc中会自动加入释放实例变量的代码,因此不必要手段增加释放实例变量的代码。不需要手动调用[super  dealloc]  
不要调用retain,release,autorelease,编译器会自动插入相关代码。 注意命名方式,不要以copyXXX方式命名不想进行retain的方法,编译器会根据方法名自动retain。  
C语言结构体中不要有对象指针    
id和void*只能通过桥接转换来进行转换    
不要使用NSAutoreleasePool,而是使用@autoreleasepool{}代码块。 转换ARC代码:Edit->Refactor->Convert  to Objective-C ARC  
strong 相当于retain。
    Strong在ARC环境为默认属性类型。
@property  (nonatomic,readwrite,strong)NSString *title;
    @property (strong, nonatomic) UIViewController *viewController;
    @property (nonatomic,  strong) id  childObject;
Default
weak 取代之前的assign,对象销毁之后会自动置为nil,防止野指针。
    Assign不能自动置为nil,需要手动置为nil。
     Delegate基本总是使用weak,以防止循环引用。特殊情况是,希望在dealloc中调用delegate的某些方法进行释放,此时如果使用weak将引起异常,因为此时已经是nil了,那么采用assign更为合适。
@property  (weak, nonatomic) IBOutlet UIButton *myButton;//处于最顶层的IBOutlet应该为strong
    @property (nonatomic,  weak) id  parentObject;
    @property(nonatomic,readwrite,weak) id  <MyDelegate> delegate;
    @property (nonatomic,  weak) NSObject  <SomeDelegate> *delegate;
 
assign 对基础数据类型(NSInteger,CGFloat)和C数据类型(int,  float, double, char等) ’@property  (nonatomic, assign) int n;
    @property (nonatomic, assign) BOOL isOK;
    @property (nonatomic,  assign)  CGFloat scalarFloat;
    @property (nonatomic,  assign)  CGPoint scalarStruct;
Default
retain NSObject及其子类。
    Release旧值,retain新值。
    Retain是指针复制(浅复制),引用计数加1,而不会导致内容被复制。
@property  (nonatomic, retain)UIColor *myColor;  
atomic   Default
nonatomic 非原子性访问,对属性赋值的时候不加锁,多线程并发访问会提高性能    
unsafe_unretained      
copy 复制内容(深复制),如果调用copy的是数组,则为指针复制(浅复制),仅仅复制子元素的指针。 @property  (nonatomic,copy)NSString  *title;
    @property (nonatomic, copy) NSMutableArray *myArray;//not recommended
    @property (nonatomic, copy) SomeBlockType someBlock;
 
readonly      
readwrite     Default
retain cycle
    循环保留
delegate和block是产生retain  cycle的主要原因    
dealloc 移除观察者observers
    注销通知notification
    设置非weak的delegate为nil
    取消timer
   
                                                                                                                                                 

[Objective-c 基础 - 3.3] @property属性详解的更多相关文章

  1. JavaScript对象的property属性详解

    JavaScript对象的property属性详解:https://www.jb51.net/article/48594.htm JS原型与原型链终极详解_proto_.prototype及const ...

  2. Vue.js 源码分析(十三) 基础篇 组件 props属性详解

    父组件通过props属性向子组件传递数据,定义组件的时候可以定义一个props属性,值可以是一个字符串数组或一个对象. 例如: <!DOCTYPE html> <html lang= ...

  3. Vue.js 源码分析(五) 基础篇 方法 methods属性详解

    methods中定义了Vue实例的方法,官网是这样介绍的: 例如:: <!DOCTYPE html> <html lang="en"> <head&g ...

  4. Vue.js 源码分析(十一) 基础篇 过滤器 filters属性详解

    Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化.过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持).过滤器应该被添加在 JavaScrip ...

  5. Android笔记-2-TextView的属性详解

    [Android 基础]TextView的属性详解 android:autoLink :设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接.可选值(none/web / ...

  6. Android零基础入门第80节:Intent 属性详解(下)

    上一期学习了Intent的前三个属性,本期接着学习其余四个属性,以及Android系统常用内置组件的启动. 四.Data和Type属性 Data属性通常用于向Action属性提供操作的数据.Data属 ...

  7. WPF依赖属性详解

    WPF依赖属性详解 WPF 依赖属性 英文译为 Dependency Properties,是WPF引入的一种新类型的属性,在WPF中有着极为广泛的应用,在WPF中对于WPF Dependency P ...

  8. Linux文件权限与属性详解 之 chattr & lsattr

    Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...

  9. HTML中元素的position属性详解

    HTML中元素的position属性详解 转载自:https://blog.csdn.net/wangzunkuan/article/details/81540935   HTML中DOM元素有5种定 ...

随机推荐

  1. mvc学习

    视频: http://edu.51cto.com/index.php?do=lession&id=14581 博客: http://www.cnblogs.com/chsword/archiv ...

  2. 优化Hoax or what的思考

    在抽取MinHeap的时候,涉及到重载,覆盖,虚函数等,有几点之前没注意到的问题在这里总结下: 1. 覆盖(override)只要是函数同名就会被覆盖,子类指针若调用父类的同名不同参数的函数的话,会在 ...

  3. 一篇文章教会你,如何做到招聘要求中的“要有扎实的Java基础

    来历 本文来自于一次和群里猿友的交流,具体的情况且听LZ慢慢道来. 一日,LZ在群里发话,“招人啦.” 然某群友曰,“群主,俺想去.” LZ回之,“你年几何?” 群友曰,“两年也.” LZ憾言之,“惜 ...

  4. mysql系列命令解释

    mysqld - the MySQL server mysql - the MySQL command-line tool mysqlaccess - client for checking acce ...

  5. 1471. Tree(LCA)

    1471 先学习了下tarjan算法的LCA 离线算法 它是先知道询问的结点对 在遍历的时候就已经算出来了 看篇图解 讲的很清楚 #include <iostream> #include& ...

  6. 第三部分 MediaPlayer的主要实现分析

    第三部分 MediaPlayer的主要实现分析 3.1 JAVA程序部分    在packages/apps/Music/src/com/android/music/目录的MediaPlaybackS ...

  7. 普通方式 分页【NOT IN】和【>】效率大PK 千万级别数据测试结果

    首现创建一张表,然后插入1000+万条数据,接下来进行测试. use TTgoif exists (select * from sysobjects where name='Tonge')drop t ...

  8. BZOJ1954: Pku3764 The xor-longest Path

    题解: 在树上i到j的异或和可以直接转化为i到根的异或和^j到根的异或和. 所以我们把每个点到根的异或和处理出来放到trie里面,再把每个点放进去跑一遍即可. 代码: #include<cstd ...

  9. Android UI设计系统-android selector 开始自定义样式

    Selector的结构描述: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:a ...

  10. DB2创建序列

    一.创建序列 序列是按照一定的规则生产的数值,序列的作用非常的大,比如银行交易中的流水号,就是记录每笔交易的关键字段. 通过create sequence语句创建序列,具体语法如下: >> ...