OC内存管理-02

原创 2015年07月06日 22:51:43

假设我们有一个人的类Person和类Book,类的具体实例变量和方法如下 

(1) Person.h

#import <Foundation/Foundation.h>

#import "Book.h"

@interface Person : NSObject

{

//Person类中有书

    Book *_book;

}

-(void)setBook:(Book *)book;

-(Book *)book;

@end

 

(2)Person.m

#import "Person.h"

/*

1) 当我们使用(占用)对象时,就对传进来的对象进行retain操作,且retain方法返回的时对象本身,所以实现代码:

_book =[book retain];

2) 当我们不使用(占用)对象时,我们应该在本身dealloc方法里对占用的对象执行一次release操作。实现语句:

[_book release]

*/

@implementation Person

-(void)setBook:(Book *)book{

 //当我们引用书对象的时候我们应该对于书book对象的计数器

//进行retain操作

    _book =[book retain];

}

-(Book *)book{

    return _book;

}

-(void)dealloc{

//不使用_book对象,需要对执行release操作

    [_book release];

NSLog(@"Person 对象被回收");

/*值得注意的时写某个类的dealloc方法时

一定要写[super dealloc],并且放在最后面

*/    

[super dealloc];

}

(3)Book.h

#import <Foundation/Foundation.h>

 

@interface Book : NSObject

 

@end

 

(4)Book.m

#import "Book.h"

 

@implementation Book

-(void)dealloc{

    NSLog(@"书对象被回收");

    [super dealloc];

}

@end

(5)main.m

#import <Foundation/Foundation.h>

#import "Person.h"

int main(int argc, const char * argv[]) {

    //创建一个人,有alloc 则就执行一次[p release]

    //p-1

    Person * p = [[Person allocinit ];

    //创建一本书,有alloc 则就执行一次[b release]

    // b1-1

    Book * b1 = [[Book allocinit];

    //计数器加1 p-1  b1-2

    p.book = b1;

    [p release];

    [b1 release];

 

    int  a;

   

      return 0;

}

 

 

总结:(1)谁retain,谁release

2)谁alloc ,谁release

关于OC中的Block使用以及ARC和MAR下的内存管理方式

1.什么是Block?     Block是属于C语言框架     Block是一种数据类型(类似int)     Block是一段代码块,只有在被调用的时候被执行(类似函数和方法) ...
  • XieEXiaoZhang
  • XieEXiaoZhang
  • 2016年07月25日 15:19
  • 965

OC的手动内存管理基础(IOS开发)

OC的内存管理分为三种:          1,手动内存管理(MRC).          2,自动内存管理(ARC)          3,垃圾回收      IOS系统并不支持垃圾回收,现在主要使...
  • aa605397965
  • aa605397965
  • 2015年07月13日 23:39
  • 765

OC学习篇之---内存管理介绍和使用

在之前的一片文章我们说了OC中谓词操作:http://blog.csdn.net/jiangwei0910410003/article/details/41923507,从今天开始我们就来看一下OC中...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2014年12月14日 16:16
  • 8990

OC学习笔记五 内存管理(property 参数)

@property不带参数会默认生成标准的setter getter方法,不会帮助管理内存。 加上了参数才会帮忙管理内存。 基本数据类型(int float....)不需要写参数,或者也可以加上(as...
  • wangjiwei2010
  • wangjiwei2010
  • 2015年08月12日 11:25
  • 554

Swift OC 内存管理

???? 1.??????? ???????,???????????,?????????????????alloc?free,?????????????????????,????,????????...
  • JoeTongOwn
  • JoeTongOwn
  • 2016年08月02日 15:01
  • 142

C++/Objective-C内存管理对比学习

C++内存管理内存分为五个区:堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈。存储函数中局部变量,函数结束时会自动释放。 堆。由new分配的内存块,由应用程序控制它的回收(需要手动回收),即一...
  • linyousong
  • linyousong
  • 2016年02月27日 22:38
  • 343

OC-内存管理的一些要点

创建一个BOOK对象,对其属性进行声明 定义。 @property 属性声明 定义了对属性的赋值  -(void) dealloc 方法在对象销毁的时候进行调用; #import @...
  • qq285016127
  • qq285016127
  • 2014年06月12日 00:21
  • 805

Objective-C 内存管理机制

一、Objective-C内存管理的对象。二、为什么要使用内存管理。三、Objective-C管理内存的方式。四、与内存有关的修饰符。五、MRC与ARC混编...
  • lover0920
  • lover0920
  • 2016年01月05日 08:57
  • 1650

OC语言之学习篇——02——内存管理

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------...
  • y694972351
  • y694972351
  • 2014年07月17日 12:06
  • 324

探讨OC的内存管理 以及防止循环引用retain cycle 代理为什么用weak block为什么用copy

首先声明OC的内存管理机制:引用计数。当一个对象的引用计数为0时,这个对象就会被释放。铭记以上两点,我们开始来探讨。 换句话说,如果一个对象,没有强指针指向,就会被释放。举个很形象的例子,假如每一个对...
  • qinqi376990311
  • qinqi376990311
  • 2016年10月26日 15:17
  • 670
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OC内存管理-02
举报原因:
原因补充:

(最多只允许输入30个字)