oc学习之旅:内存管理,文件操作流程
来源:互联网 发布:千峰python视频教程 编辑:程序博客网 时间:2024/05/20 09:06
#import <Foundation/Foundation.h>
#import "Tail.h"
#import "Cat.h"
#define PATH @"XXXXXXXXXXXXXX"
int main(int argc,constchar * argv[])
{
@autoreleasepool {
/*
NSFileManager
判断文件下是否存在
[manager fileExistsAtPath:PATH isDirectory:<#(BOOL *)#>]
if(文件夹不存在)
1.创建文件夹
{
[manager createDirectoryAtPath:<#(NSString *)#> withIntermediateDirectories:<#(BOOL)#> attributes:<#(NSDictionary *)#> error:<#(NSError *__autoreleasing *)#>];
}
创建文件部分:
[manager fileExistsAtPath:PATH]
if(文件不存在)
2.创建文件
{
[manager createFileAtPath:<#(NSString *)#> contents:<#(NSData *)#> attributes:<#(NSDictionary *)#>];
}
创建成功
--------------
NSFileHandle 获得一个可读可写的文件句柄对象 NSFileHandle *handle = [NSFileHandle fileHandleForUpdatingAtPath:PATH];
读写文件 操作nsdata对象
写:wirteData
读:readDataOfLength
读写过程中需要关注文件流指针:决定读取写到哪个位置
操作流指针:seekToFileOffset:
*/
/*
内存划分:
堆:手动开辟出来的内存空间(alloc malloc new等)不会被系统回收
只能手动回收(free release delete ...)
栈:局部变量(int a,float f...)变量的生命周期决定是否被回收
静态数据区:static int a;以static修饰的变量会存储在静态数据区
程序退出时由系统自动回收
内存管理:回收多余的内存空间
oc中:一个对象在内存中就是一段内存空间
NSMtuableString * str = [[NSMtuableString alloc] init]
如果不[str release] 那么str就会一直占用堆空间
对象的引用计数是oc特有的内存管理方法
ios会一直监控程序中的所有对象当某一个对象的引用计数值为0时对象的空间会被回收(自动调用对象的dealloc方法)
我们只需维持引用技术平衡:只要有对象在使用这段空间那么他的引用计数就不能为0
*/
Tail *t = [[Tailalloc]init];
Cat *c = [[Catalloc]init];
NSLog(@"%ld",t.retainCount);
[csetTail:t];
NSLog(@"%ld",t.retainCount);
[trelease];
t =nil;
NSLog(@"%ld",t.retainCount);
//t已经被释放,如果继续使用t对象那么就是使用野指针
[crelease];
/*
只要对象出现alloc copy mutable new retain这些关键字时就应使用对象的release autorelease方法
一对一:一个alloc对应一个release或者autorelease
各顾各:谁(对象)申请谁释放
*/
}
return0;
}
Cat.h
#import "Tail.h"
@interface Cat : NSObject
{
Tail *_tail;
}
-(void) setTail:(Tail *)tail;
-(Tail *)tail;
Cat.m
- (void)dealloc
{
self.tail =nil;
[superdealloc];
}
- (void) setTail:(Tail *)tail
{
//_tail与tail空间完全一致
//_tail = tail;
if (_tail != tail) {
[_tailrelease];
_tail = [tailretain];
}
}
-(Tail *)tail
{
return _tail;
}
Tail.m
-(void)dealloc
{
NSLog(@"%@ dealloc",[selfclass]);
[superdealloc];
}
- oc学习之旅:内存管理,文件操作流程
- oc学习之旅:内存管理1
- oc学习之旅:内存管理
- OC学习笔记之OC内存管理
- oc学习之旅:文件操作
- IOS学习之OC内存管理
- OC学习篇之-----内存管理
- OC学习笔记之OC对象的内存管理
- OC学习笔记之OC对象的内存管理二
- OC学习--内存管理
- OC学习----内存管理
- OC之【内存管理】
- oc 内存管理 -堆栈操作
- OC学习之文件目录操作
- OC学习篇之---文件的操作
- OC学习篇之---文件的操作
- OC学习之文件目录操作
- OC语言学习-内存管理
- LeetCode | Word Ladder
- iOS项目中兼容ARC与非ARC的一些宏定义
- 浮点数float转换成十六进制字符串的方法(FloatToHex)
- 2013年即将结束了
- java socket通讯之 echo server 和echo client例子
- oc学习之旅:内存管理,文件操作流程
- css3相关收集
- 不一样的Javascript(14)——继承
- 边缘检测 几何边缘检测 鱼眼镜头特效
- CentOS 6.3 minimal 安装后简单设置
- [置顶] 历届博客之星获奖博客分享
- Android Intent 详解
- 算法之道:形而之上谓之道
- svn对比乱码的问题