在Object-C中,内存的管理是通过retain和release来对对象的计数器进行加1或者减1来进行管理,当使用一个对象
的时候需要进行对对象的计数器加1,使用完成后要减1进行释放,当计数器等于0的时候对象进行销毁。内存管理的黄
金法则就是,当你对一个对象使用retain的时候,一定要进行relase释放。下面我们使用一个例子来说明这个问题,这个
例子是讲遛狗原理,一个人遛狗的时候需要讲自己的绳子套在狗的脖子上面,其他人想遛狗的时候也得把绳子套到狗的
脖子上面,然后如果不想遛狗了就需要把自己的绳子从狗的身上拿掉,也就是减1,当没有人遛狗的时候,这个狗就进
行销毁。
首先看狗这个类
#import <Foundation/Foundation.h>
@interface Dog : NSObject
{
int _ID;
}
@property int ID;
@end
#import "Dog.h"
@implementation Dog
@synthesize ID = _ID;
- (void) dealloc
{
NSLog(@"Dog %d is dealloc",_ID);
[super dealloc];
}
@end
然后是人这个类
#import <Foundation/Foundation.h>
#import "Dog.h"
@interface Person : NSObject
{
Dog *_dog;
}
- (void) setDog: (Dog *)aDog;
- (Dog*) dog;
@end
#import "Person.h"
@implementation Person
- (void) dealloc
{
NSLog(@"person is dealloc");
//把这个人所拥有的狗给释放掉
[_dog release];
[super dealloc];
}
- (void) setDog: (Dog *)aDog
{
if(aDog != _dog){
[_dog release];
_dog = aDog;
[_dog retain];//这里让dog计数器加1
}
}
- (Dog*) dog
{
return _dog;
}
@end
最后是Main函数使用
#import <Foundation/Foundation.h>
#import "Dog.h"
#import "Person.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Dog *dog1 = [[Dog alloc] init];
[dog1 setID:1];
Person *xiaoLi = [[Person alloc] init];
//小丽要遛狗
[ xiaoLi setDog:dog1];
Person *xiaoWang = [[Person alloc] init];
//小王要遛狗
[xiaoWang setDog:dog1];
NSLog(@"dog1 retainCount is %ld",[dog1 retainCount]);
[dog1 release];
NSLog(@"dog1 retainCount is %ld",[dog1 retainCount]);
[xiaoWang release];
NSLog(@"dog1 retainCount is %ld",[dog1 retainCount]);
[xiaoLi release];
}
return 0;
}
从这里可以看出对于这个内存的分配与释放是如何遵循的,估计以后写代码的时候很多情况下需要画一个图或者好好
想象才能下笔,否则的话很容易出现内存泄露这种事情的发生。
分享到:
相关推荐
内存管理这一块的代码练习,我博客里转过的一篇文章,仔细看看会有收获的
博客相关源码下载,对应博文http://blog.csdn.net/chaoyuan899/article/details/10355669
object-c内存管理与实例 还有简单的objective-c使用的例子程序。
本资源提供了一个基于Object-C语言实现列表选择功能的项目源码,旨在帮助开发者学习如何使用Object-C语言开发iOS应用中的列表选择功能。源码中包含了实现列表选择的关键代码和必要资源文件,开发者可以通过学习源码...
Object-C语言教程 Object-C语言教程 Object-C语言教程 Object-C语言教程
这篇文章为您呈现了一份详尽的Object-C语言学习资源概览,旨在帮助初学者和经验丰富的开发者系统地学习Object-C编程,并通过实践案例和项目资源提升实际编程能力。 文章首先聚焦于Object-C语言教程,这是学习Object...
Object-Oriented Programming with Object-C Object-C 进阶书籍---面向对象
阅读本文档,您最好有一定的C语言、JAVA语言的基础。 文档内容: 1. GNUStep的安装 ...14. 内存管理 15. 常用的类型 16. 写入和读取属性 17. 对象的复制 18. 多线程 19. KVC 与KVO 20. 谓词NSPredicate
Object-C语言教程:Objective-C 简介
object-c基础教程object-c基础教程object-c基础教程
Object-C语言是一种面向对象的程序设计语言,常用于iOS和macOS应用程序的开发。在iOS开发中,经常需要将JSON数据转换为模型对象,以便更方便地处理数据。为了简化这一过程,开发者可以使用开源库"MJExtension"来实现...
Object-C_在iOS上使用Object-C进行RSA算法的加密+解密实现
Object-C语言教程0220.zipObject-C语言教程0220.zipObject-C语言教程0220.zipObject-C语言教程0220.zipObject-C语言教程0220.zipObject-C语言教程0220.zipObject-C语言教程0220.zip
文档介绍了简介,基本概念,函数,获得所有权的函数包括,释放所有权的函数包括,规则,容器,其他所有权的产生,,循环引用
Object-C语言实现列表选择项目源码.zipObject-C语言实现列表选择项目源码.zipObject-C语言实现列表选择项目源码.zip
Object-C期末复习资料,包含多道题目助力期末复习,成功考试过关
EventBusObject-CVersion(EventBus的Object-C语言版本)