写了有半年多的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
但是事情就出现了,
- 问题一:为什么我释放了这两个对象的时候没有任何的报错?
- 问题而:我在
@sythsize中array = _array;
中这样写了之后,我还是不是必须将_array在viewDidLoad中alloc之后才能使用 - 问题三:有没有好的代码规范的文章推荐看一下,最好的内存管理这一块的
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成对出现,一般不会出现内存问题