[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种定 ...
随机推荐
- 李洪强iOS开发本人集成环信的经验总结_07_监听好友请求
李洪强iOS开发本人集成环信的经验总结_07_监听好友请求 来到Appdalegate中: 遵守代理协议 设置代理 实现监听好友请求的回调的方法
- 【mysql的设计与优化专题(1)】ER图,数据建模与数据字典
需求分析是做项目中的极为重要的一环,而作为整个项目中的'血液'--数据,更是重中之重.viso,workbench,phpmyadmin等软件可以帮我们更好的处理数据分析问题. ER图 E-R方法是& ...
- Adobe Acrobat XI Pro安装破解
注册机使用说明: Install Instructions: (Read carefully!) 安装说明(仔细阅读!) 1. Disable your Network card or pull th ...
- forks rate异常
一.收到nagios Current_load报警短信
- 中断服务程序不用interrupt关键字也可实现中断,该关键字是否必须?
2013-06-20 11:13:35 中断服务程序不用interrupt关键字也可实现中断,该关键字是否必须? 使用tools->pin connect,将INT5与pin.txt关联,模拟外 ...
- NFC(8)关于新买的标签的格式化
有多种方法格式化nfc标签设备. 如搜相关的手机上应用,在应用里选择格式类型 本文是用代码手动格式 public void writeNFCTag(Tag tag) { if (tag == null ...
- cisco vpn client for win10 x64 setup package
win10 x64安装cisco vpn client报错,解决方法如下: 1.卸载以前安装的所有cisco vpn client,并重启电脑. 2.运行winfix.exe 3.安装Global V ...
- UVa 400 (水题) Unix ls
题意: 有n个文件名,排序后按列优先左对齐输出.设最长的文件名的长度为M,则最后一列长度为M,其他列长度为M+2. 分析: 这道题很简单,但要把代码写的精炼,还是要好好考虑一下的.lrj的代码中有两个 ...
- Java [leetcode 30]Substring with Concatenation of All Words
题目描述: You are given a string, s, and a list of words, words, that are all of the same length. Find a ...
- 关于Memcache mutex设计模式的.net实现
之前在网上看过memcache-mutex的场景分析和实现代码,这里将.net方式加以实现,当然这里主要是依据原文的伪代码照猫画虎,以此做为总结及记录.如果您对相应实现感兴趣可以尝试使用本文提供的代码 ...