[Objective-c 基础 - 3.3] @property属性详解
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属性详解的更多相关文章
- JavaScript对象的property属性详解
JavaScript对象的property属性详解:https://www.jb51.net/article/48594.htm JS原型与原型链终极详解_proto_.prototype及const ...
- Vue.js 源码分析(十三) 基础篇 组件 props属性详解
父组件通过props属性向子组件传递数据,定义组件的时候可以定义一个props属性,值可以是一个字符串数组或一个对象. 例如: <!DOCTYPE html> <html lang= ...
- Vue.js 源码分析(五) 基础篇 方法 methods属性详解
methods中定义了Vue实例的方法,官网是这样介绍的: 例如:: <!DOCTYPE html> <html lang="en"> <head&g ...
- Vue.js 源码分析(十一) 基础篇 过滤器 filters属性详解
Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化.过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持).过滤器应该被添加在 JavaScrip ...
- Android笔记-2-TextView的属性详解
[Android 基础]TextView的属性详解 android:autoLink :设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接.可选值(none/web / ...
- Android零基础入门第80节:Intent 属性详解(下)
上一期学习了Intent的前三个属性,本期接着学习其余四个属性,以及Android系统常用内置组件的启动. 四.Data和Type属性 Data属性通常用于向Action属性提供操作的数据.Data属 ...
- WPF依赖属性详解
WPF依赖属性详解 WPF 依赖属性 英文译为 Dependency Properties,是WPF引入的一种新类型的属性,在WPF中有着极为广泛的应用,在WPF中对于WPF Dependency P ...
- Linux文件权限与属性详解 之 chattr & lsattr
Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...
- HTML中元素的position属性详解
HTML中元素的position属性详解 转载自:https://blog.csdn.net/wangzunkuan/article/details/81540935 HTML中DOM元素有5种定 ...
随机推荐
- mvc学习
视频: http://edu.51cto.com/index.php?do=lession&id=14581 博客: http://www.cnblogs.com/chsword/archiv ...
- 优化Hoax or what的思考
在抽取MinHeap的时候,涉及到重载,覆盖,虚函数等,有几点之前没注意到的问题在这里总结下: 1. 覆盖(override)只要是函数同名就会被覆盖,子类指针若调用父类的同名不同参数的函数的话,会在 ...
- 一篇文章教会你,如何做到招聘要求中的“要有扎实的Java基础
来历 本文来自于一次和群里猿友的交流,具体的情况且听LZ慢慢道来. 一日,LZ在群里发话,“招人啦.” 然某群友曰,“群主,俺想去.” LZ回之,“你年几何?” 群友曰,“两年也.” LZ憾言之,“惜 ...
- mysql系列命令解释
mysqld - the MySQL server mysql - the MySQL command-line tool mysqlaccess - client for checking acce ...
- 1471. Tree(LCA)
1471 先学习了下tarjan算法的LCA 离线算法 它是先知道询问的结点对 在遍历的时候就已经算出来了 看篇图解 讲的很清楚 #include <iostream> #include& ...
- 第三部分 MediaPlayer的主要实现分析
第三部分 MediaPlayer的主要实现分析 3.1 JAVA程序部分 在packages/apps/Music/src/com/android/music/目录的MediaPlaybackS ...
- 普通方式 分页【NOT IN】和【>】效率大PK 千万级别数据测试结果
首现创建一张表,然后插入1000+万条数据,接下来进行测试. use TTgoif exists (select * from sysobjects where name='Tonge')drop t ...
- BZOJ1954: Pku3764 The xor-longest Path
题解: 在树上i到j的异或和可以直接转化为i到根的异或和^j到根的异或和. 所以我们把每个点到根的异或和处理出来放到trie里面,再把每个点放进去跑一遍即可. 代码: #include<cstd ...
- Android UI设计系统-android selector 开始自定义样式
Selector的结构描述: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:a ...
- DB2创建序列
一.创建序列 序列是按照一定的规则生产的数值,序列的作用非常的大,比如银行交易中的流水号,就是记录每笔交易的关键字段. 通过create sequence语句创建序列,具体语法如下: >> ...