OC7_复合类内存管理(setter方法)
//
// 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方法)的更多相关文章
- rt-thread中动态内存分配之小内存管理模块方法的一点理解
@2019-01-18 [小记] rt-thread中动态内存分配之小内存管理模块方法的一点理解 > 内存初始化后的布局示意 lfree指向内存空闲区首地址 /** * @ingroup Sys ...
- 内存管理2-set方法的内存管理
1.对象之间的内存管理: 每个学生都有一本书 book类 @price 学生类 @age @book -------------------- #import "book.h" ...
- 内存管理2-set方法的内存管理-程序解析
创建class Book .h 有@ property float price; //@synthesize 自动 ------------ 创建class Student #import &quo ...
- 关于内存管理/set/get方法
MRC状态下 1 任何继承NSObject的对象,存放于堆控件中,都需要手动管理内存 .2 基本数据类型放到栈中,对象放到堆空间中,内存是有系统管理的.(int\float\enum\struct) ...
- 七.OC基础加强--1.内存管理 2.野指针,内存泄露 3.set方法的内存管理 4.@property参数 5.@class和循环retain的使用 6.NSString的内存管理
1,内存管理简单介绍 1,为什么要有内存管理? malloc selloc dealloc```需要回头复习 一般的内存 4s 是512m内存:6 是1024m内存: 当内存过大时,会耗尽内存.出现程 ...
- Objective-C:内存管理
1 传统内存管理 Objective-C对象的生命周期可以分为:创建.存在.消亡. 1.1 引用计数 类似Java,Objective-C采用引用计算(reference counting)技术来管理 ...
- JMM内存管理
原文地址http://www.cnblogs.com/BangQ/p/4045954.html 原本准备把内存模型单独放到某一篇文章的某个章节里面讲解,后来查阅了国外很多文档才发现其实JVM内存模型的 ...
- OC-引用计数器,内存管理,野指针
总结 全局断点 →-->+-->Add Exception Breakpoint 开启僵尸监听 打开Edit scheme -->Diagnostics-->Enable Zo ...
- cocos2d-x内存管理
Cocos2d-x内存管理 老师让我给班上同学讲讲cocos2d-x的内存管理,时间也不多,于是看了看源码,写了个提纲和大概思想 一. 为什么需要内存管理 1. new和delete 2. 堆上申 ...
随机推荐
- 修改 SVN 账户密码的方法
记是记不住 的,即便是每天都在用的东西,也有貌似熟悉其实很陌生的时候,或者说根本就是不熟悉.于是需要拿出来经常翻翻,比如我们的SVN账户配置,很简单的一个 case,你可能是svn使用高手,但不一定记 ...
- 【转】shell脚本处理字符串的常用方法
转自:http://blog.csdn.net/linfeng999/article/details/6661233 1. 构造字符串 直接构造 STR_ZERO=hello #shell中等号左右的 ...
- Codeforces Round #Pi (Div. 2) B. Berland National Library 模拟
B. Berland National LibraryTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contes ...
- 【Objective-C】04-第一个OC程序解析
说明:这个Objective-C专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序猿,可以高速上手Objective-C.假设你还没有编程经验,或者对Objective-C.iOS开发 ...
- android短信发送器源代码
Activity类: import java.util.List;import android.app.Activity;import android.app.PendingIntent;import ...
- 随意一条查询sql转换为查询结果集相应的数目
原思路: 像括号配对一样,假设遇见select 就入栈,假设遇见from就出栈,直到栈为空,取得此时的位置.进行字符串截取. 实现方法:遇见字符s而且连续后5个字符elect 就+1,遇见字符f而且连 ...
- EasyBCD 2.2中文版安装变色龙wowpc.iso详细教程(适用各个版本)
第一章 安装变色龙引导本章节提供3种安装方案,请自行选择 1.使用 Windows 版变色龙安装器安装适用引导方案:BIOS+MBR第1步:下载 Chameleon Install 2.2svn228 ...
- 关于AS3的垃圾回收
FlashPlayer运行GC(Gabage Collection)的时间并不固定,它会根据你的内存的占用情况来决定运行GC的时间.它会根据用户机器的内存值来设定一个阀值,然后将程序的占用内存量保存在 ...
- Spring 的微内核与FactoryBean扩展机制--转载
作者:江南白衣 原文地址: http://www.blogjava.net/calvin/archive/2005/08/30/11099.html http://www.blogjava.net/c ...
- 使用Loadrunner进行接口测试
在工作中很多时候都需要进行接口测试,如果只是进行接口的功能测试这个很简单,两种类型: 1.如果是基于get的直接使用浏览器进行访问,查看服务器返回的数据是否正确就行, 2.如果是基于post的可以接触 ...