[Objective-c 基础 - 3.1] 内存管理
A.内存存放、retain、release
//当一个Person对象被系统回收的时候,就会调用此方法
- (void) dealloc
{
NSLog(@"Person对象被回收");
[superdealloc];
}
//
[prelease]; p.age=;
[prun];
@interfacePerson :NSObject
{
Book*_book;
} - (Book*) book;
- (void) setBook:(Book*) book; @end
@implementationPerson
- (Book*) book
{
return_book;
} - (void) setBook:(Book*) book
{
if(_book!= book)
{
[_bookrelease];
}
_book= [bookretain];
} - (void) dealloc
{
[_bookrelease];
NSLog(@"Person被回收");
[superdealloc];
} @end
intmain(intargc,constchar* argv[]) {
// b=1
Book*b = [[Bookalloc]init];
// p1=1
Person*p1 = [[Personalloc]init];
// b=2
[p1setBook:b];
// b=1
[brelease];
b =nil;
// p1=0, b=0
[p1release];
p1 =nil;
return0;
}
@interfacePerson :NSObject
@propertyintage;
@property(retain)Book*book; @end
@implementationPerson
- (void) dealloc
{
[_bookrelease];
[superdealloc];
}
@end
NSLog(@"p.weight = %d", p.abc);
#import<Foundation/Foundation.h>
#import"Card.h" @interfacePerson : NSObject
@property(nonatomic,retain) Card *card;
@end
#import<Foundation/Foundation.h>
#import"Person.h" @interfaceCard :NSObject
@property(nonatomic,retain)Person*person;
@end
#import<Foundation/Foundation.h> @classCard; @interfacePerson :NSObject
@property(nonatomic,retain)Card*card;
@end
#import<Foundation/Foundation.h> @classPerson; @interfaceCard : NSObject
@property(nonatomic,retain) Person *person;
@end
intmain(intargc,constchar* argv[]) {
Person*p = [[Personalloc]init];
Card*c = [[Cardalloc]init];
p.card= c;
c.person= p;
[prelease];
[crelease];
return0;
}
@implementationPerson
- (void) dealloc
{
NSLog(@"Person被回收");
[_cardrelease];
[superdealloc];
} @end
#import<Foundation/Foundation.h> @classPerson; @interfaceCard :NSObject
@property(nonatomic,assign)Person*person;
@end
@implementationPerson
- (void) dealloc
{
NSLog(@"Person被回收");
[_cardrelease];
[superdealloc];
} @end
@implementationCard
- (void) dealloc
{
NSLog(@"Card被回收");
// [_person release]; //没有retain,不必release
[superdealloc];
} @end
Person*p =nil;
//创建自动释放池
@autoreleasepool
{//自动释放池开始
// autorelease方法会返回对象本身
// autorelease会将对象放到一个自动释放池
//当自动释放池被销毁的时候,会对池子里面的所有对象做一次release操作
p = [[[Personalloc]init]autorelease];
p.age=;
}//自动释放池销毁,所有对象release一次
// p.age = 20; //运行时错误
+ (id) person
{
return[[[Personalloc]init]autorelease];
}
+ (id) person
{
return[[[selfalloc]init]autorelease];
}
[Objective-c 基础 - 3.1] 内存管理的更多相关文章
- IOS基础 Day-1手动内存管理
辞职回家打算自学IOS开发,就在借个地方记录一下 Day-1 手动内存管理 主要内容:release retain必须配对好,不然会占用内存 慢慢积累导 ...
- OC基础15:内存管理和自动引用计数
"OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.什么是ARC? (1).ARC全名为A ...
- c语言基础学习08_内存管理
=============================================================================涉及到的知识点有:一.内存管理.作用域.自动变 ...
- Java基础练习4(内存管理)
请根据如下程序代码,画出对应的内存管理图(不需要画方法区),并写出输出结果. 1. public class Cell{ int row; int col; public Cell(int row,i ...
- IOS基础之 (十一) 内存管理 ARC
一 内存管理 1. set 方法内存管理的相关参数 retain: release旧值,retain新值(值适用于OC对象) assign:直接赋值(set方法默认,适用于非OC对象类型,即基本数据类 ...
- IOS基础之 (十) 内存管理
一 基本原理 1.什么是内存管理 移动设备的内存有限,每个app所能占用的内存是有限制的. 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间.比如回收一些不需要使用 ...
- Object-C 基础笔记4---ARC内存管理
内存管理的原则 1,对你自己拥有的对象负责.你只能释放自己拥有的对象.(谁污染谁治理). 2,凡是通过retain,alloc,copy等于段获得了所有权对象,都必须在你不再使用的时候释放.调用rel ...
- 七.OC基础加强--1.内存管理 2.野指针,内存泄露 3.set方法的内存管理 4.@property参数 5.@class和循环retain的使用 6.NSString的内存管理
1,内存管理简单介绍 1,为什么要有内存管理? malloc selloc dealloc```需要回头复习 一般的内存 4s 是512m内存:6 是1024m内存: 当内存过大时,会耗尽内存.出现程 ...
- MySQL 调优基础(二) Linux内存管理
进程的运行,必须使用内存.下图是Linux中进程中的内存的分布图: 其中最重要的 heap segment 和 stack segment.其它内存段基本是大小固定的.注意stack是向低地址增长的, ...
随机推荐
- ASP.NET 4.5.256 has not been registered on the Web server
请见:http://answers.microsoft.com/en-us/insider/forum/insider_apps-insider_other/aspnet-45256-has-not- ...
- C语言itoa()函数和atoi()函数详解(整数转字符)
http://c.biancheng.net/cpp/html/792.html C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串. 以下是用itoa()函数将整 ...
- Linux C/C++ 编程练手 --- 大数相加和大数相乘
最近写了一个大数相乘和相加的程序,结果看起来是对的.不过期间的效率可能不是最好的,有些地方也是临时为了解决问题而直接写出来的. 可以大概说一下相乘和相加的解决思路(当然,大数操作基本就是两个字符串的操 ...
- 在安装ISE的情况下,充分利用ISE的安装目录,查找资料
2013-06-22 11:03:02 在找资料时,通过官网输入关键字的方法找资料,有事会给出很多版本的链接.或者找不到,下面给出一种简便的方法,可以快速找到想要的资料. 如果要找ISE各个工具如pl ...
- JS将下拉框的disable变为able的方法
在jquery中可以通过jqueryObj.attr("disabled","disabled")将页面中某个元素置为不可编辑或触发状态,但是在jquery的A ...
- Innodb 锁系列2 事务锁
上一篇介绍了Innodb的同步机制锁:Innodb锁系列1 这一篇介绍一下Innodb的事务锁,只所以称为事务锁,是因为Innodb为实现事务的ACID特性,而添加的表锁或者行级锁. 这一部分分两篇来 ...
- [原]Unity3D深入浅出 - 脚本开发基础(Scripts)
常用脚本事件: Update:每帧调用一次 Start:在第一次Update执行前调用 Awake:脚本实例在创建时调用 FixedUpdate:每个固定物理时间间隔调用一次 LateUpdate:每 ...
- 8.11-8.16:usaco
summary:57 bzoj1741:裸二分图最大匹配 #include<cstdio> #include<cstring> #include<iostream> ...
- [LOJ 1038] Race to 1 Again
C - Race to 1 Again Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu D ...
- 【转】android新建项目时 出现appcompat_v7工程错误和红色感叹号
原文网址:http://www.cnblogs.com/xiaozhang2014/p/4109856.html 最近初学android,版本是22.6.0的话,每次创建一个项目就会出现一个appco ...