iPhone 内存管理

news/2024/10/17 23:25:19/

 iPhone 内存管理

http://www.cnblogs.com/wwwkhd/archive/2011/01/12/1933788.html  iPhone 内存管理(转)

http://blog.csdn.net/ilysony/article/details/6332483    异步加载的网络图片的控件

http://hi.baidu.com/yangcong121/home   

http://dev.10086.cn/cmdn/wiki/index.php?doc-view-3333.html  iPhone开发过程的困惑

http://keywind.me/?p=169   iPhone内存管理详细解说(一)

创建一个命令行项目:

String对象不管内存,测试代码:

#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *obj=[[NSString alloc ]init];  
NSLog(@"%i,%@,%i",1,*obj,obj.retainCount);
NSString *obj2=obj;	
NSLog(@"%i,%@,%i",2,*obj,obj.retainCount);
[obj release]; 
NSLog(@"%i,%@,%@",3,*obj,obj);
[pool drain];
return 0;
}
1,NSCFString,-1
2,NSCFString,-1
3,NSCFString,

数组的释放

单个数组的释放.

http://www.cocoachina.com/bbs/read.php?tid-11705.html  

#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
NSMutableArray *obj = [NSMutableArray arrayWithArray:
[[NSArray alloc] initWithObjects:
@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"k",@"L",@"M",@"N",@"O",@"P",@"Q",@"R",@"S",nil]];
NSLog(@"%i,%@,%i",1,*obj,obj.retainCount);	
[pool drain];
NSLog(@"%i,%@,%i",2,*obj,obj.retainCount); 
return 0;
}
1,NSCFArray,1
2,NSCFArray,-1

使用1次retain:

#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
NSMutableArray *obj = [NSMutableArray arrayWithArray:
[[NSArray alloc] initWithObjects:
@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"k",@"L",@"M",@"N",@"O",@"P",@"Q",@"R",@"S",nil]];
[obj retain];
NSLog(@"%i,%@,%i",1,*obj,obj.retainCount);	  
[pool drain];
NSLog(@"%i,%@,%i",2,*obj,obj.retainCount); 
return 0;
}
1,NSCFArray,2
2,NSCFArray,1
使用2次:

#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
NSMutableArray *obj = [NSMutableArray arrayWithArray:
[[NSArray alloc] initWithObjects:
@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"k",@"L",@"M",@"N",@"O",@"P",@"Q",@"R",@"S",nil]];
[obj retain];
[obj retain];
NSLog(@"%i,%@,%i",1,*obj,obj.retainCount);	  
[pool drain];
NSLog(@"%i,%@,%i",2,*obj,obj.retainCount); 
return 0;
}
1,NSCFArray,2
2,NSCFArray,1
retain了2次,必须release2次,才能释放干净:

#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
NSMutableArray *obj = [NSMutableArray arrayWithArray:
[[NSArray alloc] initWithObjects:
@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"k",@"L",@"M",@"N",@"O",@"P",@"Q",@"R",@"S",nil]];
[obj retain];
[obj retain];
NSLog(@"%i,%@,%i",1,*obj,obj.retainCount);	  
[pool drain];
[obj release];
[obj release];
NSLog(@"%i,%@,%i",2,*obj,obj.retainCount); 
return 0;
}
1,NSCFArray,3
2,NSCFArray,-1



将数组直接给另一数组:

#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
NSMutableArray *obj = [NSMutableArray arrayWithArray:
[[NSArray alloc] initWithObjects:
@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"k",@"L",@"M",@"N",@"O",@"P",@"Q",@"R",@"S",nil]];
NSLog(@"%i,%@,%i",1,*obj,obj.retainCount);	
NSMutableArray *obj2=obj;
NSLog(@"%i,%@,%i",2,*obj,obj.retainCount);	
NSLog(@"%i,%@,%i",2,*obj2,obj2.retainCount);
[pool drain];
NSLog(@"%i,%@,%i",3,*obj,obj.retainCount); 
return 0;
}
1,NSCFArray,1
2,NSCFArray,1
2,NSCFArray,1
3,NSCFArray,-1



下面将报错

	NSArray *obj=[[NSArray alloc]init];   
NSLog(@"%i,%@,%i",1,*obj,obj.retainCount);
NSArray *obj2=obj;	
NSArray *obj3=obj2;	
NSLog(@"%i,%@,%i",2,*obj,obj.retainCount);
NSLog(@"%i,%@,%i",2,*obj2,obj2.retainCount);
[obj3 release]; 
[obj2 release]; 
[obj release]; 
NSLog(@"%i,%@,%@",3,*obj,obj);
1,__NSArray0,2
2,__NSArray0,2
2,__NSArray0,2
hello(2557) malloc: *** error for object 0x10010caf0: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
正确的是:

	NSArray *obj=[[NSArray alloc]init];   
NSLog(@"%i,%@,%i",1,*obj,obj.retainCount);
NSArray *obj2=obj;	
NSArray *obj3=obj2;	
NSLog(@"%i,%@,%i",2,*obj,obj.retainCount);
NSLog(@"%i,%@,%i",2,*obj2,obj2.retainCount);
[obj release];  
NSLog(@"%i,%@,%@",3,*obj,obj);

在这种情况下,释放obj,obj2,obj3,只要写一句就可以.



http://www.ppmy.cn/news/743004.html

相关文章

unity占内存大小_unity texture 占用内存大小对比

打包多种类型的项目,空项目和10张放在Resources文件夹中的图为比较案例。以下是比较数据。 IPHONE: 1.空项目----空间占用量42.3MB----IPA大小10MB 2.10张1200*520无压缩Texure 单张图占用量2.8MB----空间占用量70.2MB----IPA大小22.9MB 3.10张1200520压缩成10241024PVRTC4 单…

山东省职业院校技能大赛高职组“信息安全管理与评估”赛项样卷

发一个去年省赛的样题给大家比较一下 2022年山东省职业院校技能大赛高职组 “信息安全管理与评估”赛项 样卷 目录 一、赛项名称 二、赛项时间 第一阶段竞赛项目试题 (一)竞赛任务介绍 (二)

前端三件套之css(5) BFC

目录 什么是BFC 能触发BFC的标签或属性 BFC布局的标准规则 什么是BFC BFC全称(Block formatting context) 意为&#xff1a;"块级格式化上下文"。 它就像我们学校分班级一样&#xff0c;虽然都是一个学校&#xff0c;但是每个班是独立的&#xff0c;不相干扰的…

在Rust中使用torch------day1环境配置Yolov8推理

现在不管什么专业,貌似多多少少都得和深度学习扯上点关系才好写文章(水文章).其中最常用的深度学习框架应该是tensorflow,pytorch这些python的三方库,既然最近在学Rust那就来借机讲讲torch的Rust绑定—tch-rs 其实tch实际上是基于libtorch的封装,而不是pytorch.因此使用起来如…

python爬取小说

import requests from lxml import etree import time Main_url“https://www.biquge9.com” def Get_Url(url):#获取主页 header {“User-Agent”:“Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/1…

java中 像素、英寸、厘米的换算

这两天用swing写打印&#xff0c;不知道怎么调打印纸张大小&#xff0c;setSize(width, height)里面的参数的单位是点(像素)&#xff0c;不知道怎么转成厘米。但是从下载的资料里都看到这样一句&#xff1a;页面大小以点为计量单位&#xff0c;1点为1英才的1/72&#xff0c;1英…

C语言如何创建和使用多文件项目,并进行模块化开发?

首先&#xff0c;让我解释一下什么是多文件项目和模块化开发。当你的代码变得越来越复杂时&#xff0c;将所有的代码都放在一个文件里会变得非常混乱。这时&#xff0c;你可以将不同的功能或模块放在不同的文件中&#xff0c;每个文件负责一个特定的任务。这样做不仅使代码更易…

2-1. 厘米换算英尺英寸

如果已知英制长度的英尺foot和英寸inch的值&#xff0c;那么对应的米是(footinch/12)*0.3048。现在&#xff0c;如果用户输入的是厘米数&#xff0c;那么对应英制长度的英尺和英寸是多少呢&#xff1f;别忘了1英尺等于12英寸。 输入格式&#xff1a; 输入在一行中给出1个正整数…