OC-049.컬렉션의 메모리 관리(MRC 및 ARC)

1725 단어
1. MRC에서 집합된 메모리 관리
· 대상을 집합에 추가하면 집합은 이 대상에 대해retain 조작을 한 번 합니다. 집합에서 대상을 삭제할 때 집합은 이 대상에 대해release 조작을 한 번 합니다. 집합이 삭제될 때 집합 중의 모든 원소에 대해release 조작을 한 번 합니다.
#import //------main.m
#import "LSMe.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        LSMe *me = [[LSMe alloc] init];
        NSLog(@"%zd",me.retainCount);//1
//    NSMutableArray *array = [NSMutableArray array]; , LSMe
        NSMutableArray *array = [[NSMutableArray alloc] init];
        [array addObject:me];// , retain 
        NSLog(@"%zd",me.retainCount);//2
//        [array removeObject:me];// , release 
        [array release];// , release 
        NSLog(@"%zd",me.retainCount);//1
        [me release]; //LSMe     
    }
    return 0;
}
#import //------LSMe.h

@interface LSMe : NSObject

@end
#import "LSMe.h"//------LSMe.m

@implementation LSMe
-(void)dealloc{
    NSLog(@"%s",__func__);
    [super dealloc];
}
@end

2. ARC에서 집합된 메모리 관리
·대상을 집합에 추가하면.집합은 이 대상에 대한 강력한 인용(지침)이 있습니다. 집합에서 대상을 삭제할 때 집합은 이 대상에 대한 강력한 인용(지침)을 방출합니다. 그룹이 소각될 때 모든 요소를 호출하는 강력한 인용을 방출합니다.
#import //------main.m    LSMe.h .m ,.m dealloc
#import "LSMe.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
         LSMe *me = [[LSMe alloc] init];
         NSMutableArray *array = [[NSMutableArray alloc] init];
//       me = nil;   me , me 
        [array addObject:me];// , 
//        [array removeObject:me];// , 
         me = nil;
        array = nil;// , 
      
    }
    return 0;
}

좋은 웹페이지 즐겨찾기