出现内存问题一般有两个方面:
1.内存溢出:超出了给你限定的内存区域导致的问题(就跟用容器装水一样,超出了容器的水就会溢出)
2.野指针访问:对象的内存空间已经被系统回收,仍然使用指针操作这块内存。野指针操作是引起程序crash的主要原因。代码量越大越难找出野指针的位置
好了 下面我们来了解一下内存的管理 只有了解了内存管理才能够帮我们提升程序的性能,减少bug调试时间以及减少bug发生几率
首先 我们如何管理内存呢?
解决方案:对象有创建就要有销毁
所谓的内存管理就是对对象的创建和销毁的过程进行管理。
好了废话一大堆
下面来点实际的 内存整理中需要注意的事项
dealloc是继承自父类(NSObject)的方法,当对象的引用计数为0时,有系统使用该对象调用dealloc方法
dealloc方法我们不要自己调用
下面是dealloc方法的调用
先创建一个类的.m文件 在里面输入
//执行时机:当对象的retaincount为0的时候,系统会自动使用对象调用dealloc这个方法
-(void)dealloc{
NSLog(@"%@被释放了",self);
//调用父类的dealloc方法要放在最后写
[super dealloc];
Person *person3=[[Person alloc]init];
[person3 retain];
[person3 autorelease];
NSLog(@"person3=%lu",person3.retainCount);
@synthesize num=_num;
//当对象执行copy方法时,会执行copyWithZone方法
-(id)copyWithZone:(NSZone *)zone{
//创建一个新的同类型的对象
Person *person=[Person allocWithZone:zone];
//将被copy对象的值,赋值给新创建出来的实例对象,既完成了copy方法,
person.name=self.name;
person.num=self.num;
return person;
}
@"换换"这个字符串存在常量区,常量区的东西不能被打印
NSString *yu=@"换换";
NSLog(@"yu=%lu",yu.retainCount);
[yu release];
NSLog(@"yu=%lu",yu.retainCount);