Archive for the ‘01 – 基础信息’ Category.

为什么不能直接调用dealloc而是release

M 在看过CS193P的笔记后,以下是真正有用的句子:

dealloc不等于C中的free,dealloc并不将内存释放,也不会将索引计数(Reference counting)降低。于是直接调用dealloc反而无法释放内存。

在Objective-C中,索引计数是起决定性作用的。

对比:id与NSObject

N 以下是来自CS193P的笔记:

1,id关键字在编译时不被检查,而NSObject在编译时会被检查是否被调用一些错误方法。

2,id可以是任何对象,包括非NSObject对象

3,定义id的时候不使用*,NSObject却需要。

我的理解,基本上来讲,定义id类似于定义了一个地址(只有指针,抽象指针),而NSObject是确实的定义了一个逻辑对象的地址。

一个来自CS193P笔记的链接:

http://unixjunkie.blogspot.com/2008/03/id-vs-nsobject-vs-id.html

在子类(sub-class)中覆盖“初始化”和“默认”函数

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方法。

更改Xcode的缺省公司名

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___, 他们就不会雇佣你 (基础知识很重要嘛,玩笑拉~)