zoukankan      html  css  js  c++  java
  • iOS 非ARC基本内存管理系列 5-autorelease方法使用总结

    autorelase:可以将对象交给自动释放池中,释放池销毁的时候对里面的对象做一次release操作代码如下

        @autoreleasepool {
            Person *person = [[[Person alloc] init] autorelease];
        }
    上面代码虽然正确,但是为了简化代码在开发中一般是提供一个类方法来专门创建对象,并且将管理内存的代码封装到类方法中:
    注意:定义方法名的时候以类名开头,返回类型为instancetype,而且在创建对象的时候使用self关键字
    /******************************** Person.h文件 ********************************************/
    #import
    <Foundation/Foundation.h> @interface Person : NSObject @property (nonatomic,assign) int age; + (instancetype)person; + (instancetype)personWithAge:(int)age; @end /*********************************** Person.m文件 ********************************/ #import "Person.h" @implementation Person
    // 类方法命名以类名开头
    + (instancetype)person { Person *person = [[[self alloc] init] autorelease]; // 用self后Person类不仅可以快速创建对象 如果有子类继承Person也可以创建对象
       return person; 
    }

    + (instancetype)personWithAge:(int)age { Person *person = [self person];
       person.age = age;
       return person; }
    - (void)dealloc { NSLog(@"%d岁的Person对象被销毁",_age); [super dealloc]; } @end /*********************************** mian.m文件 ********************************/ #import <Foundation/Foundation.h> #import "Person.h"
    int main(int argc, const char * argv[]) { @autoreleasepool { Person *person = [Person person]; person.age = 30;
    Person
    *Person2 = [Person personWithAge:20]; } return 0; }
    上面代码中是模拟系统写法:即方法中没有alloc,new,copy说明返回的对象都是autorelease过的对象,不用release或autorelease
    而且系统中的很多方法也是遵照这个原则,比如下面代码
    @autoreleasepool {
    int a = 20;
    NSString
    *str = @"abc"; NSString *str2 = [NSString stringWithFormat:@"%d",a]; NSNumber *num = [[NSNumber alloc] initWithInt:a]; [num release];
    }
    可以看出在创建NSString类对象的时候就不用关心内存问题,系统已经在底层实现了对内存的管理。但是如果系统方法中涉及到了alloc,new,copy还需要去管理内存
    
    
  • 相关阅读:
    Android studio 一些技术添加依赖,依赖库
    第三方集成之Mob-SMSSDk-短信验证
    使用友盟第三方集成实现QQ登录
    Android 日夜间切换Demo
    Sqlite数据库添加数据以及查询数据方法
    从网络获取json数据,使用imageloader获取网络图片资源并显示在ListView上
    检测Xcode项目不用的文件与图片
    Markdown语法
    iOS动画
    OC与JS交互之WKWebView
  • 原文地址:https://www.cnblogs.com/QM80/p/3597023.html
Copyright © 2011-2022 走看看