//
// Person.h
// OC7_复合类内存管理(setter方法)
//
// Created by zhangxueming on 15/6/18.
// Copyright (c) 2015年 zhangxueming. All rights reserved.
// #import <Foundation/Foundation.h>
#import "Dog.h" @interface Person : NSObject
{
Dog *_dog;
} - (Dog *)dog; - (void)setDog:(Dog *)dog; @end
//
// Person.m
// OC7_复合类内存管理(setter方法)
//
// Created by zhangxueming on 15/6/18.
// Copyright (c) 2015年 zhangxueming. All rights reserved.
// #import "Person.h" @implementation Person - (Dog *)dog
{
return _dog;
} //方法一:
//- (void)setDog:(Dog *)dog
//{
// _dog = dog;
//} //方法二: //- (void)setDog:(Dog *)dog
//{
// _dog = [dog retain];
//} //方法三: - (void)setDog:(Dog *)dog//xiaoHei _dog count = 1;
{
[_dog release];//0
// NSLog(@"lajfalfjal");
// NSLog(@"jslfjslfjl");
// NSLog(@"lajfalfjal");
// NSLog(@"jslfjslfjl");
// NSLog(@"lajfalfjal");
// NSLog(@"jslfjslfjl");
// NSLog(@"lajfalfjal");
// NSLog(@"jslfjslfjl");
// NSLog(@"lajfalfjal");
// NSLog(@"jslfjslfjl");
// NSLog(@"lajfalfjal");
// NSLog(@"jslfjslfjl");
// NSLog(@"lajfalfjal");
// NSLog(@"jslfjslfjl");
// NSLog(@"lajfalfjal");
// NSLog(@"jslfjslfjl");
_dog = [dog retain];
} //标准写法
//- (void)setDog:(Dog *)dog
//{
// if (_dog!=dog) {
// [_dog release];
// _dog = [dog retain];
// }
//} - (void)dealloc
{
[_dog release];
[super dealloc];
} @end
//
// Dog.h
// OC7_复合类内存管理(setter方法)
//
// Created by zhangxueming on 15/6/18.
// Copyright (c) 2015年 zhangxueming. All rights reserved.
// #import <Foundation/Foundation.h> @interface Dog : NSObject @end
//
// Dog.m
// OC7_复合类内存管理(setter方法)
//
// Created by zhangxueming on 15/6/18.
// Copyright (c) 2015年 zhangxueming. All rights reserved.
// #import "Dog.h" @implementation Dog
//-(void)dealloc
//{
// //NSLog(@"12321313");
// [super dealloc];
//}
@end
//
// main.m
// OC7_复合类内存管理(setter方法)
//
// Created by zhangxueming on 15/6/18.
// Copyright (c) 2015年 zhangxueming. All rights reserved.
// #import <Foundation/Foundation.h>
#import "Dog.h"
#import "Person.h" int main(int argc, const char * argv[]) {
@autoreleasepool {
Dog *xiaoBai = [[Dog alloc] init];
Person *xiaoXin = [[Person alloc] init];
//方法一: 不ok,人并没有真正持有狗,如果在main函数里[xiaoBai release],让dog的引用计数减1,就变为0,dog就销毁了
// xiaoXin.dog = xiaoBai;
// NSLog(@"retainCount = %li", xiaoBai.retainCount);
// [xiaoBai release];//
// [xiaoXin release];
//方法二:
//不ok,如果人再持有别的狗,就会造成第一条狗得不到释放,内存泄露。
// xiaoXin.dog = xiaoBai;
// NSLog(@"xiaoBai retainCount = %li", xiaoBai.retainCount);
// Dog *xiaoHei = [[Dog alloc] init];
// xiaoXin.dog = xiaoHei;
// [xiaoBai release];
// [xiaoHei release];
// [xiaoXin release];
//方法三:不ok,如果本来持有一条狗,又重新设置这条狗,先进行release,这个时候,很可能dog就销毁了,然后,就没法再次retain了。
xiaoXin.dog = xiaoBai;
Dog *xiaoHei = xiaoBai; //[xiaoBai retain]
NSLog(@"xiaoHei retainCount = %li", xiaoBai.retainCount);
[xiaoBai release];
NSLog(@"xiaoHei retainCount = %li", xiaoHei.retainCount);
xiaoXin.dog = xiaoHei;
[xiaoXin release]; }
return ;
}

OC7_复合类内存管理(setter方法)的更多相关文章

  1. rt-thread中动态内存分配之小内存管理模块方法的一点理解

    @2019-01-18 [小记] rt-thread中动态内存分配之小内存管理模块方法的一点理解 > 内存初始化后的布局示意 lfree指向内存空闲区首地址 /** * @ingroup Sys ...

  2. 内存管理2-set方法的内存管理

    1.对象之间的内存管理: 每个学生都有一本书 book类 @price 学生类  @age @book -------------------- #import "book.h" ...

  3. 内存管理2-set方法的内存管理-程序解析

    创建class Book .h 有@ property float price;  //@synthesize 自动 ------------ 创建class Student #import &quo ...

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

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

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

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

  6. Objective-C:内存管理

    1 传统内存管理 Objective-C对象的生命周期可以分为:创建.存在.消亡. 1.1 引用计数 类似Java,Objective-C采用引用计算(reference counting)技术来管理 ...

  7. JMM内存管理

    原文地址http://www.cnblogs.com/BangQ/p/4045954.html 原本准备把内存模型单独放到某一篇文章的某个章节里面讲解,后来查阅了国外很多文档才发现其实JVM内存模型的 ...

  8. OC-引用计数器,内存管理,野指针

    总结 全局断点 →-->+-->Add Exception Breakpoint 开启僵尸监听 打开Edit scheme -->Diagnostics-->Enable Zo ...

  9. cocos2d-x内存管理

    Cocos2d-x内存管理 老师让我给班上同学讲讲cocos2d-x的内存管理,时间也不多,于是看了看源码,写了个提纲和大概思想 一.   为什么需要内存管理 1. new和delete 2. 堆上申 ...

随机推荐

  1. Could not allocate CursorWindow size due to error -12 错误解决方法

    04-29 11:13:54.284 13584-13584/com.uniubi.smartfrontdesk E/art: Throwing OutOfMemoryError "pthr ...

  2. cdoj 1255 斓少摘苹果 贪心

    斓少摘苹果 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1255 Descr ...

  3. Codeforces Gym 100286I iSharp 水题

    Problem I. iSharpTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/ ...

  4. ResultSet转成java类对象

    在做web开发时遇到一个事情: 需要从mysql数据表中查询数据并遍历查询结果 这样最简单的方式是:查询到结果根据表中字段列表的顺序来一个个获取字段,但这样需要记住字段的顺序,操作起来不是那么方便.因 ...

  5. U盘安装Win7 64位系统(笔记本+台式机亲测)

    准备工具: 1. Win7 64位系统的镜像文件(网上随便一搜即可,最好是纯净版,没有一堆乱七八糟的内置软件) 2. 4G以上的U盘一个 所用软件: 老毛桃(官网下载) 具体步骤: 1.数据备份(将原 ...

  6. 交换a、b

    有两个变量a和b,不使用任何中间变量交换a和b. 方法一: 采用如下方法: a=a+b; b=a-b; a=a-b; 这样做的缺点就是如果a.b都是比较大的数,则a=a+b时就会越界. 而采用: a= ...

  7. Python学习 之 走进python

    1.Python:是一种解释型的.面向对象的.带有动态语义的高级程序设计语言. 2.Python发展阶段 —CNRI时期 —BeOpen时期 —DC时期 —Python 3.0 Python里程碑:2 ...

  8. 1015. Reversible Primes (20)

    the problem is from PAT,which website is http://pat.zju.edu.cn/contests/pat-a-practise/1015 this pro ...

  9. 对request.getSession(false)的理解(附程序员常疏忽的一个漏洞)--转

    出处:http://blog.csdn.net/xxd851116/archive/2009/06/25/4296866.aspx [前面的话] 在网上经常看到有人对request.getSessio ...

  10. SkyEye的使用

    转载:http://blog.csdn.net/htttw/article/details/7226754 对于希望学习ARM汇编的同学而言, 购买ARM开发板进行板上实测无疑是一个有效的方法,不过购 ...