首页 > 关于 objective-c内存管理的疑问

关于 objective-c内存管理的疑问

写了有半年多的objective-c了,公司只有我一个人做ios开发,周末去参加黑客马拉松的时候发现别人的代码比我规范,这几天就在研究这玩意,我先代码在提问

在.h中
@interface LoginPageViewController : UIViewController
{
	NSArray *_array2;
@private
	NSArray *_array;
	
}

@property (nonatomic,retain) NSArray *array;

在.m中
@implementation LoginPageViewController
@synthesize array = _array;

- (void)dealloc
{
	NSLog(@"loginPage dealloc");
	[super dealloc];
	NSLog(@"_array count = %d",[_array retainCount]);
	[_array release];
	NSLog(@"_array2 count = %d",[_array2 retainCount]);
	[_array2 release];
}

我在.m中没有alloc 这两个数组
2012-12-18 09:54:38.020 iPhone_MIU[1926:11303] loginPage dealloc
2012-12-18 09:54:38.021 iPhone_MIU[1926:11303] _array count = 0
2012-12-18 09:54:38.022 iPhone_MIU[1926:11303] _array2 count = 0

但是事情就出现了,

  1. 问题一:为什么我释放了这两个对象的时候没有任何的报错?
  2. 问题而:我在@sythsize中array = _array;中这样写了之后,我还是不是必须将_array在viewDidLoad中alloc之后才能使用
  3. 问题三:有没有好的代码规范的文章推荐看一下,最好的内存管理这一块的

1.Objective-c可以向nil对象发送消息.
2.@property和@synthesize编译器指令是用来合成getter和setter方法的.至于需不需要在在viewDicLoad中分配一个对象给_array,要看你的需求。建议你看下Objective-c中的属性方面资料.
3.内存管理这块的文章很多,你百度下就OK了,另外今后建议您使用ARC.


个人建议,把项目移到ARC下面吧,它不光让你的代码整洁许多,更重要的是,能够让编译器做的事情就不要手动做了。


1、objective-c是可以向nil对象发送消息而不会报错
2、建议你熟悉一下@property中,retain、copy、assign的区别,还需知道readonly的作用,才能决定是否需在viewDidLoad中alloc成员变量
3、只要你alloc、retain、copy与release成对出现,一般不会出现内存问题

【热门文章】
【热门文章】