博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【语法】【内存管理】retain和release
阅读量:6692 次
发布时间:2019-06-25

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

内存管理

任何继承了NSObject的对象,都需要进行垃圾回收,对基本数据类型无效(int float double 指针等)           

原理

每个对象内部都保存了一个与之相关联的整数,称为引用计数器,当使用alloc、new或者copy创建一个对象时,对象的引用计数器被设置为1

给对象发送一条retain消息可以使引用计数器值+1;

给对象发送一条release消息可以使引用计数器值-1;

当意个对象的引用计数器值为0时那么他讲被销毁,其占用的内存被系统回收,OC也会自动向对象发送一条dealloc消息,一般会重写delloc方法,在这里释放相关资源,一定不要直接调用dealloc方法

可以给对象发送retaincount消息获得当前的引用计数器值。

 

附上下列代码:【在版本上面本机xcode不支持retain 和release】

Student.h
////  Student.h//  retain release的简单实用////  Created by 裴烨烽 on 14-1-26.//  Copyright (c) 2014年 裴烨烽. All rights reserved.//#import 
@interface Student : NSObject@property int age;@end
Student.m
////  Student.m//  retain release的简单实用////  Created by 裴烨烽 on 14-1-26.//  Copyright (c) 2014年 裴烨烽. All rights reserved.//#import "Student.h"@implementation Student@synthesize age=_age;-(void)dealloc{    NSLog(@"%@被销毁了",self);//表示self被销毁了。这里是访问自己的内存地址的内容            //super 最好放在后面,自己的一些实现,放在前面    [super dealloc];  //一定要调用回super的dealloc方法}@end
main.m
////  main.m//  retain release的简单实用////  Created by 裴烨烽 on 14-1-26.//  Copyright (c) 2014年 裴烨烽. All rights reserved.//#import 
#import "Student.h"void test(){ // insert code here... NSLog(@"Hello, World!"); Student *stu=[[Student alloc] init];//这alloc后计数器为1 NSLog(@"count %zi",[stu retainCount]);//查看计数器的数字条数。 [stu retain];//这里计数器会+1;现在变为2 NSLog(@"count %zi",[stu retainCount]);//查看计数器的数字条数。 [stu release]; NSLog(@"count %zi",[stu retainCount]);//查看计数器的数字条数。   [stu release]; //!!!!!!这里不能实用NSLog(@"count %zi",[stu retainCount]);//查看计数器的数字条数。因为retain变为0,不存在。 //不能多次release 也就是会发生野指针错误。访问的是不改访问的内存。}int main(int argc, const char * argv[]){ @autoreleasepool { Student *stu=[[[Student alloc] init] autorelease]; //在某个适当的时间释放就是说,不会马上释放掉,只会过一段时间后释放。 } return 0;}

 

 

转载于:https://www.cnblogs.com/madeininfi/p/3534437.html

你可能感兴趣的文章
记linux shell的两个小技巧:shell数组和字符串判断
查看>>
Cisco3550交换机配置DHCP;vlan,acl经典应用
查看>>
把C#.NET程序移植到DB2上的经验浅谈(C#连接DB2可以用IBM.Data.DB2.dll)
查看>>
学焊接专业的编程爱好者应用好通用权限管理系统写出了自己工作中需要的小软件...
查看>>
rhel5+dhcp+vsftp+pxe+tftp+kickstart环境配置脚本
查看>>
不同换行符的差异处理
查看>>
解决:由于本机限制,该操作已被取消‏
查看>>
Capital One World MasterCard Cashback
查看>>
Intel(R) 82579V网卡驱动程序 for Windows Server 2003 x64
查看>>
统一一个文件中bit位 1 的个数
查看>>
nginx+keepalived以及nginx反向代理实现
查看>>
企业为什么抛弃传统电话?
查看>>
centos7.2源码安装php7.0.9和nginx1.10.3服务器
查看>>
[php]php连mysql出错:Call to undefined function mysql_connect()
查看>>
strtolower() 函数
查看>>
MongoDB查询返回指定键
查看>>
SQL Server 2017 AlwaysOn on Linux 配置和维护(12)
查看>>
SQL Server 2017 AlwaysOn on Linux 配置和维护(18)
查看>>
我的友情链接
查看>>
EBB-20、远程连接和文件ACL
查看>>