代码改变世界

字符串和集合的内存管理

2015-12-14 12:17  AB小博客  阅读(158)  评论(0)    收藏  举报

 1.retain 是指针拷贝 copy 是内容拷贝
 2.如果想在set方法中不修改外部传递过来的字符串,则使用copy,否则使用retain
 
//
//  main.m

#import <Foundation/Foundation.h>

@interface Person : NSObject

@end
@implementation Person

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

@end
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:5];
        Person *p1 = [[Person alloc]init];  //+1
        [dict setObject:p1 forKey:@"ccc"];
        NSUInteger r = [p1 retainCount];
        NSLog(@"%ld",r);//2
        [dict removeObjectForKey:@"ccc"];
        r = [p1 retainCount];
        NSLog(@"%ld",r);//1
        [p1 release];
        
        
        
     /*   NSMutableArray *array = [NSMutableArray arrayWithCapacity:10];
        Person *p = [[Person alloc]init];  //+1
        [array addObject:p];//向可变数组添加会使引用计数加1  +1
        NSUInteger r = [p retainCount];
        NSLog(@"%ld",r);//2
        
        [array removeObject:p];  //删除会使引用计数减一 -1
        r = [p retainCount];
        NSLog(@"%ld",r);
        [p release];*/
    }
    return 0;
}