oc学习之旅:内存管理,文件操作流程

#import <Foundation/Foundation.h>

#import "Tail.h"

#import "Cat.h"

#define PATH @"XXXXXXXXXXXXXX"

int main(int argc,const char * 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 afloat 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

         各顾各:谁(对象)申请谁释放

         */

    }

   return 0;

}


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

{

    //_tailtail空间完全一致

    //_tail = tail;

   if (_tail != tail) {

        [_tailrelease];

       _tail = [tail retain];

    }

}

-(Tail *)tail

{

   return  _tail;

}


Tail.m

-(void)dealloc

{

    NSLog(@"%@ dealloc",[selfclass]);

    [superdealloc];

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值