为什么不能直接调用dealloc而是release
M 在看过CS193P的笔记后,以下是真正有用的句子:
dealloc不等于C中的free,dealloc并不将内存释放,也不会将索引计数(Reference counting)降低。于是直接调用dealloc反而无法释放内存。
在Objective-C中,索引计数是起决定性作用的。
IPhone, Cocoa, PHP, Javascript, JQuery, Actionscript, etc…
Archive for the ‘01 – 基础信息’ Category.
M 在看过CS193P的笔记后,以下是真正有用的句子:
dealloc不等于C中的free,dealloc并不将内存释放,也不会将索引计数(Reference counting)降低。于是直接调用dealloc反而无法释放内存。
在Objective-C中,索引计数是起决定性作用的。
I 在CS193P中,Evan强调了以下问题:
为什么要在覆盖init的时候需要检查是否在父类中作初始化,例如:
- (id)init { if(self = [super init]) { } }
或
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { // Custom initialization } return self; }
主要是将本地对象用父类的init进行初始化,其中的等号“=”另一方面检查了是不是成功进行了初始化。CS193P提供了更多关于这个的信息:
http://cocoadev.com/index.pl?FactoryMethod
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
不仅仅是init等初始化对象,还有其他一些方法(Method)是需要对自己的父类打声招呼得,例如:
- (void)viewDidLoad { [super viewDidLoad]; }
那这个没有super这句会怎么样呢?没事,一样用。这个是一个delegate,所以需要收听的类应该会收听到的。但是既然缺省的方法就是这么写的,我们也没有必要特意去删除掉这个super方法。
X Xcode
// // TestViewController.m // MultiThread // // Created by Zhengliang Guo on 09-6-7. // Copyright 2009 __MyCompanyName__. All rights reserved. //
版权保护到“MyCompanyName”… 那是保护谁阿?对于我来说,就应该改成 guozhengliang.com一类的吧,我也没有公司 — 也不至于改成 CalState San Marcos,我只是个学生职员。(不说废话了)
解决方案:
在终端中运行一下命令:
defaults write com.apple.Xcode PBXCustomTemplateMacroDefinitions '{"ORGANIZATIONNAME" = "你的公司名";}'简单吧,如果不好使记得在前面加sudo
听说如果苹果发现你的Xcode里面是缺省的___MyCompanyName___, 他们就不会雇佣你 (基础知识很重要嘛,玩笑拉~)