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. 堆上申 ...
随机推荐
- 2015南阳CCPC G - Ancient Go 暴力
G - Ancient Go Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description Yu Zhou likes to play Go wi ...
- HDU 4593 H - Robot 水题
H - RobotTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.act ...
- C# 图片保存到数据库和从数据库读取图片并显示
图片保存到数据库的方法: public void imgToDB(string sql) { //参数sql中要求保存的imge变量名称为@images //调 ...
- 偶然发现关于网页JavaScript脚本无法正常运行的原因
客户常常打电话投诉公司的销售系统有问题, 后来发现有的客户直接把网址设为受限网站,才导致系统无法正常执行.改动后正常.
- [AngularJS] ngModelController render function
ModelValue and ViewValue: $viewValue: Actual string value in the view. $modelValue: The value in the ...
- iOS开发——实用篇Swift篇&状态栏操作
状态栏操作 在Swift开发过程中,针对状态栏操作的过程有很多. 1.在ViewController中操作当前ViewController的状态栏 /** 隐藏状态栏 */ override func ...
- 具体解释Android中AsyncTask的使用
在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler模式须要为每个任务创建一个新的线程,任务完毕后通过Handler实例向UI线程发送消息,完毕界面的更新 ...
- Javascript-获取URL请求参数
function getUrlParam(){ var param = [], hash; var url = window.location.href;//获取网页的url va ...
- MySQL中的WITH ROLLUP
MySQL中的WITH ROLLUP MySQL的扩展SQL中有一个非常有意思的应用WITH ROLLUP,在分组的统计数据的基础上再进行相同的统计(SUM,AVG,COUNT…),非常类似于Orac ...
- Logback日志使用详解
概述 Logback建立于三个主要类之上:日志记录器(Logger),输出端(Appender)和日志格式化器(Layout).这三种组件协同工作,使开发者可以按照消息类型和级别来记录消息,还可以在程 ...