有关于OC内存管理的使用

用类方法创建的对象你怎么release掉?!
用在类方法里追加autoRelease方法 , 在main函数里使用该类方法的时候创建一个线程池, 系统会自动把这个类方法创建的对象放入离它最近的线程池里(OC的约定) ;调用线程池的drain(干涸)方法即可释放类方法创建的对象!
为什么不在该类方法 Test *a = [Test getInstance] 下面调用 [a release]方法呢?!第一这里调用可以!但是其他例子就不行了为什么因为你在类外面你不知道我类里边到底alloc init创建了多少个对象 , 你要知道你尽管release...... 所以说我们在这里要进行autoRelease自动释放也被称为延后释放

main.m文件

#import <Foundation/Foundation.h>
#import "Test.h"

//void foo(int i) {
//    Test *a = [[Test alloc] init] ;
//    Test *b = nil ;
//    if (i > 10) {
//        b = a ;
//        [b retain] ;
//    }
//    [a release] ;
//    [b release] ;
//}

int main(int argc, const char * argv[]) {
//    foo(1) ;
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init] ;
    Test *a = [Test getInstance] ;
    NSLog(@"main before drain") ;
    [pool drain] ;
    NSLog(@"main after drain") ;
    return 0;
}

Test.h文件

#import <Foundation/Foundation.h>

@interface Test : NSObject
+ (Test *)getInstance ;
@end

Test.m文件


#import "Test.h"

@implementation Test

//了解一个语言的核心:就是了解那些系统帮我们操作的东西 ;
- (instancetype)retain {
    NSLog(@"Test:before Retain: %@" , @(self.retainCount)) ;
    id result = [super retain] ;
    NSLog(@"Test after Retain %@" , @(self.retainCount)) ;
    return result ;
}


- (oneway void)release {
    NSLog(@"Test:before Release: %@" , @(self.retainCount)) ;
    [super release] ;
    NSLog(@"Test:before Release: %@" , @(self.retainCount)) ;
    
    
}


- (void)dealloc {
    [super dealloc] ;
    NSLog(@"Test:dealloc") ;
}


+ (Test *)getInstance {
    Test *result = [[[Test alloc] init] autorelease] ;
    return result ;
}

@end

愿编程让这个世界更美好

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 29.理解引用计数 Objective-C语言使用引用计数来管理内存,也就是说,每个对象都有个可以递增或递减的计数...
    Code_Ninja阅读 5,494评论 1 3
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,401评论 30 472
  • 内存管理 简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与a...
    丶逐渐阅读 6,070评论 1 16
  • iOS内存管理 概述 什么是内存管理 应用程序内存管理是在程序运行时分配内存(比如创建一个对象,会增加内存占用)与...
    蚊香酱阅读 11,011评论 8 119
  • 37.cocoa内存管理规则 1)当你使用new,alloc或copy方法创建一个对象时,该对象的保留计数器值为1...
    如风家的秘密阅读 4,385评论 0 4

友情链接更多精彩内容