博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
内存管理原则
阅读量:7303 次
发布时间:2019-06-30

本文共 1370 字,大约阅读时间需要 4 分钟。

1.原则分析

只要还有人在使用某个对象,那么这个对象就不会被回收
只要你想用这个对象,就让对象的计数器+1
当你不再使用这个对象时,就让对象的计数器+1
 
2. 谁创建,谁release
如果你通过alloc 、new 或[mutable]copy 来创建一个对象,那么你必须调用 
release或autorelease
换句话说,不是你创建的,就不用你去[auto]release
 
3.谁retain,谁release
只要你调用了retain,无论这个对象是如何生成,你都要调用release
 
4.总结
有始有终,有加就有减
曾经让对象的计数器+1, 就必须在最后让对象计数器-1
 
set方法的内存管理
 
如果你有个OC对象类型的成员变量,就必须管理这个成员变量的内存。
比如有个Book*_book
 
1.set方法的实现
- (void)setBook:(Book *)book
{
if (_book != book)
[_book release];
_book = [book retain];
}
}
 
2. dealloc方法的实现 (不要直接调用dealloc)
 
- (void)dealloc
{
[_book release];
[super dealloc];
}
 
3.@property参数
1> OC对象类型
@property (nonatomic,retain) 类名 *属性名;
@property (nonatomic,retain) Car *car;
@property (nonatomic,retain) id car;
 
2> 非OC对象类型 (int\folat\enum\struct)
@property (nonatomic,assign) 类型名称 属性名;
@property (nonatomic,assign) int age;
 
4.autorelease
 
1>系统自带的方法中,如果不包含alloc、new、copy,那么这些方法返回的对象都是已经autorelease过的
[NSString stringWithFormat:…..];
[NSdate date];
 
2>开发中经常写一些类方法快速创建一个autorelease的对象
*创建对象的时候不要直接使用类名,用self
 
其他相关
 
1.set方法内存管理相关的参数
*retain:release旧值,retain新值(适用于OC对象类型)
*assign:直接赋值(默认,适用于非0C对象类型)
*copy   :release旧值,copy新值
 
2.是否要生成set方法
*readwrite:同时生成setter和getter的声明、实现
*readonly:只会生成getter的声明、实现
 
3.多线程管理
*nonatomic:性能高(一般就用这个)
*atomic:性能低(默认)
 
4.setter和getter方法的名称
*setter:决定了set方法的名称,一定要有个冒号 : 
*getter:决定了get方法的名称(一般用在BOOL类型(返回BOOL类型的方法名一般以is开头))

 

转载于:https://www.cnblogs.com/qls1992/p/5248069.html

你可能感兴趣的文章
Python爬虫框架Scrapy 学习笔记 6 ------- 基本命令
查看>>
lvm快照的创建恢复
查看>>
数学之美笔记(二十)
查看>>
网站设计八步骤
查看>>
Oracle系统用户的默认密码及功能
查看>>
获取数组中的最大值
查看>>
Operation category READ is not supported in state standby
查看>>
elasticsearch 6.6 安装(CentOS 7.5) 修订
查看>>
python进阶资源整理
查看>>
对Struts2的认识(-)
查看>>
25个经典的Spring面试问答
查看>>
老男孩Linux运维第41期20171016第六周学习重点课堂记录
查看>>
负载均衡 LVS
查看>>
APACHE-TOMCAT集群环境部署
查看>>
Linux文件管理以及一些常用的基础命令解析
查看>>
SpringQuartz定时任务调度器
查看>>
开始——“运行”命令集
查看>>
配置管理篇(0)_SaltStack 安装
查看>>
如何将Windows Server域(AD活动目录)中的用户导出并导入至Outlook2010通讯簿
查看>>
Converting slapd.conf to a Directory Based Configu
查看>>