在OC的编程中内存是自动的释放的,当我们创建一个对象,不使用这个对象的时候,系统就会自动的将这个内存释放,有的时候我们需要手动的将内存释放,那么我们在OC中怎样手动的将内存释放.首先要做的是讲Objecttive-C Automatic Reference Counting发值设置为NO,其实也就是将系统自带的内存释放机制取消了。
在这个文章中我们通过一个例子来演示一下这个怎样手动的释放内存:
首先我们需要做的是创建一个类:
#import <Foundation/Foundation.h>
@interface Person : NSObject
//括号里面的nonatomic是表示原子锁操作,是防止在不同进程中,对同一个变量的同时的访问 //这样做提高的效率,具体内容可以参考
@property(nonatomic,copy)NSString *pname;
@property(nonatomic,assign)int age;
//@property(nonatomic,strong) Car *car;
-(void)dealloc;
@end
/*
NSString copy
int assign
引用的类型 strong
*/
其实释放内存的重要的环节还是调用函数dealloc这个函数,来实现内存的释放。
在实现文件中这个函数是怎样的定义的:
-(void)dealloc
{
[super dealloc];
NSLog(@"内存被释放");
}
在主函数中调用该函数,并且释放掉内存;
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *person = [[Person alloc] init]; //在这个地方是创建一个对象并且给这个对象进行初始化
NSLog(@"%ld",person.retainCount);//所有的对象中都有一个函数,是表示在这个对象引用之后,如果是内存还没有被释放这样函数ratainCount的返回值是1
[person retain]; //这个是调用的函数ratain是当对象调用这个函数的是的对象的引用的次数就会增加1
NSLog(@"%ld",person.retainCount);
[person dealloc]; //当对象调用这个函数时候,函数的调用的次数就会减少1
NSLog(@"%ld",person.retainCount);
}
return 0;
}
//通过对数字变化的观察我们可以很明显的看到对象被引用或者是被释放,如果我们一开始不将