创建class Book

.h 有@ property float price;  //@synthesize 自动

------------

创建class Student

#import "Book.h"

.h 有@property int age;

@property Book *book;         //@synthesize 自动

--------------

验证Student对象是否回收

Student.m

-(void)dealloc{

NSLog(@"Student :%i 被销毁了",_age);

[super dealloc];

}

--------------

为了方便访问_age 创建可以传入_age 的构造方法

Student.h

-(id)initWithAge:(int)age;

student.m

-(id)initWithAge:(int)age{

if(self=[super init]){   //如果super返回的对象不为空

_age=age;

}

return self;

}

----------------------

验证Book对象是否回收

Book.m

-(void)dealloc{

NSLog(@" book:%f 被销毁了",_price);

[super dealloc];

}

----------------------------

//with _price Book constructor

Book.h

-(void)initWithPrice:(float)price;

Book.m

-(void)initWithPrice:(float)price{

if(self=[super init]){   //如果super返回的对象不为空

_price=price;

}

}

----------------------------

annotation method

1 #pragma mark constructor

(advantage:easy:locate)

2 #pragma mark -groupname

(advantage :group)

3 Of course // can work

----------------------------

main.m

#import "Book.h"

#import "Student.h"

main(){

@autoreleasepool{

Student *stu=[[Student alloc]initWithAge:10]; //stu 1

Book *book =[[Book alloc]initWithPrice:3.5];// book 1

stu.book=book;// In reality never use this way//book 1

[book release];//book 0

[stu release];//stu 0

}

return 0;

}

---------------------------------

Student.m

//manually realize getter & setter

//Standard realization of getter and setter

Student.h   // Because u do manually so XCode will not call  @synthesize, so there is no //_book,so we need to state _book ourself.

@interface Student:NSObject{

Book *_book;

}

Student.m

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

_book=book;

}

-(Book *)book{

return _book;

}

// Abopve six line can be short for

//@synthesize book=_book;

---------------------------------------

Then counter

-----------------------------------------

// When we developing in reality ,we may use object

//so change code

//main.m

void test (Student *stu){

Book *book=[[Book  alloc]initWithPrice:3.5];

stu.book=book;

[book release];

}

void test1(Student *stu){

//add reading method

//Student.h -(void)readBook;

//Student.m

//-(void)readBook{

//NSLog(@"Reading book is:%f",_book.price);

//}

[stu readBook];// not safe ,visiting _book,because in test book is released so (wild pointer)

}

-------------------------

//change code

main(){

test(stu);

test1(stu);

}

-----------------------------

//student want to make use of book object so, retain book in Student

//setBook retain;stu alloc release

---------------------------------

//Improve code

// so compare the passed book object  with current book object if not the same one,

//release the previous one.

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

if(self.book!=book){

[_book release];             // empty pointer is safe.

_book=[book retain];

}

}

//被释放(-1)和被销毁(0)不同

内存管理2-set方法的内存管理-程序解析的更多相关文章

  1. 七.OC基础加强--1.内存管理 2.野指针,内存泄露 3.set方法的内存管理 4.@property参数 5.@class和循环retain的使用 6.NSString的内存管理

    1,内存管理简单介绍 1,为什么要有内存管理? malloc selloc dealloc```需要回头复习 一般的内存 4s 是512m内存:6 是1024m内存: 当内存过大时,会耗尽内存.出现程 ...

  2. 分享.net常见的内存泄露及解决方法

    分享.net常见的内存泄露及解决方法 关于内存泄漏的问题,之前也为大家介绍过,比如:<C++中内存泄漏的检测方法介绍>,是关于C++内存泄漏的.今天为大家介绍的是关于.NET内存泄漏的问题 ...

  3. 关于内存管理/set/get方法

    MRC状态下 1 任何继承NSObject的对象,存放于堆控件中,都需要手动管理内存 .2 基本数据类型放到栈中,对象放到堆空间中,内存是有系统管理的.(int\float\enum\struct) ...

  4. OC中的属性、方法及内存管理

    普通方法:关注(代表)对象可以”干什么”,过程中需要实例变量.-(void)show;输出 … 访问属性    属性:属性专门处理实例变量.(程序执行过程当中)    初始化方法:一创建对象(第一时间 ...

  5. OC:内存管理、dealloc方法、copy知识点

    属性的声明:使⽤@property声明属性
 例如:@property NSString *name: 相当于@interface中声明了两个⽅法(setter.getter): 属性的实现:使⽤@s ...

  6. set方法的内存管理细节

    一.多个对象之间的内存管理 1.你想使用(占用)某个对象,就应该让对象的计数器+1(让对象做一次retain操作) 2.你不想再使用(占用)某个对象,就应该让对象的计数器-1(让对象做一次releas ...

  7. Android内存管理(5)*官方教程:Logcat内存日志各字段含义,查看当前内存快照,跟踪记录内存分配,用adb查看内存情况时各行列的含义,捕获内存快照的3种方法,如何让程序暴漏内存泄漏的方法

    Investigating Your RAM Usage In this document Interpreting Log Messages                 内存分析日志中各消息的含 ...

  8. 【转载】Unity 优雅地管理资源,减少占用内存,优化游戏

    转自:星辰的<Unity3D占用内存太大的解决方法> 最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大. 这里写下关于Unity3D对于内存的管理与优化. Unity3D  ...

  9. DPDK内存管理-----(二)rte_mempool内存管理

    DPDK以两种方式对外提供内存管理方法,一个是rte_mempool,主要用于网卡数据包的收发:一个是rte_malloc,主要为应用程序提供内存使用接口.本文讨论rte_mempool.rte_me ...

  10. iOS 非ARC基本内存管理系列 2-多对象内存管理(3) 利用@property来自动管理内存

    iOS 基本内存管理-多对象内存管理(2)中可以看到涉及到对象的引用都要手动管理内存:每个对象都需要写如下代码 // 1.对要传入的"新车"对象car和目前Person类对象所拥有 ...

随机推荐

  1. 开发人员需求能kill杀死其它阻塞自己的会话,测试发现需要alter system权限有风险

    模拟开发人员需求,可以杀死其它阻塞自己的会话1.能有查询阻塞会话确认的权限SQL> grant select on v_$session to testa;SQL> grant selec ...

  2. 部署java应用的几种方式

    J2EE应用 该应用根目录下有好多文件夹和以jsp结尾的文件 部署时,需要在tomcat的conf目录下的server.xml文件中添加上<Context path="/" ...

  3. Java内存 模型理解

    概述 在正式讲Java内存模型之前,我们先了解一些物理计算机并发问题,然后一点点的引出Java内存模型的由来. 多任务处理在现在计算机操作系统中几乎是一项必备的功能.这不单是因为计算机计算能力强大,更 ...

  4. Android 自定义控件之 日期选择控件

    效果如下: 调用的代码: @OnClick(R.id.btn0) public void btn0() { final AlertDialog dialog = new AlertDialog.Bui ...

  5. Node +FastDFS 实现文件的上传下载

    npm install fastdfsl-client //--------------------------------配置文件---------------------------------- ...

  6. 二、eureka服务端注册服务

    所有文章 https://www.cnblogs.com/lay2017/p/11908715.html 正文 入口 上文我们说到,eureka是使用jersey来对外提供restful风格的rpc调 ...

  7. ElementUi使用表单验证出现验证问题

    问题: 使用vue element-ui中的form表单验证出现了输入框或者下拉框中明明有值, 但是却还是提示请输入或请选择,错误如下: <el-form status-icon :ref=&q ...

  8. 字体图标iconfont

    字体图标的作用: 1. 可以做出图片一样可以做的事情, 改变透明度, 旋转度,等... 2. 但是本质其实是文字,可以很随意的改变颜色, 产生阴影,透明效果等 3. 本身体积更小,但携带的信息并没有消 ...

  9. C语言程序经过编译链接后形成二进制映像文件的组成

    C语言程序经过编译链接后形成二进制映像文件由栈,堆,数据段,代码段组成,其中数据段又分为:只读数据段,已经初始化读写数据段,未初始化数据段(BSS段).如下图所示: 1.栈区(stack):由编译器自 ...

  10. List、Set、Map集合的遍历方法

    一.List集合遍历 public class TraversingList { /** * @author zhuxun describe: 定一个List集合并遍历 */ /** 定义一个List ...