内存管理

一,内存管理

1.内存管理是关于如何管理对象生命周期的编程原则 。

2.OC中的内存管理只针对OC中的对象,所有的对象都继承NSObject ·

3.基本数据类型不需要管理内存。(int, long, double, float, char, struct, ....... )

4.当一个对象没有人再使用,该对象应该从内存中销毁掉 。

二,引用计数

1.所有OC的对象都有一个计数器, 这个计数器我们称为引用计数。

2.引用计数表示有几个“人”在使用当前对象。

3.每个对象都有一个retainCount引用计数,表示当前对象被引用的数量 。

4.alloc,retain,release的用法

   alloc用来创建对象,创建完成之后,引用计数为1,只调用一次。

 retain使引用计数+1,可以多调用几次。

 release使引用计数-1,可以多调用几次。

 当引用计数为0的时候会调用dealloc。

   黄金法则:每次调用alloc一次,都需要调用release一次,他们两是成对出现的。

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Person *person = [[Person alloc] init];//引用计数为1
        NSLog(@"引用计数:%ld",[person retainCount]);
        //引用计数加1
        [person retain];
        //引用计数减1
        [person release];
        NSLog(@"引用计数:%ld",[person retainCount]);
        [person release];
    }
    return 0;
}

 

5.dealloc的用法

  当对象的引用计数为0时,系统调用此对象的dealloc方法。

  我们应该在dealloc方法中,释放他持有的对象。 

  调⽤用[super dealloc]是为了释放父类持有的对象所有权。 

@implementation Person

- (void)dealloc{
    NSLog(@"调用 dealloc 方法摧毁对象,当前引用计数为0.");
    [super dealloc ];
}
@end

6.@property关键字

@property NSString *userName

 这样定义的方式之后,这个属性就会自动有set/get方法了

 第一步生成_userName属性

 第二步为_userName属性自动生成set/get方法

   1、第一个位置的值:

   atomic:线程保护的,默认

   nonatomic:线程不保护的

  2、第二个位置的值:

  assign:直接赋值,默认

  retain:保留对象,内部会自动调用retain方法,引用计数+1

  copy:拷贝对象

 

 

posted @ 2016-08-02 22:16  我的蜡笔小新  阅读(135)  评论(0编辑  收藏  举报