Object-c笔记1

  • 这篇教学 假设你已经有一些基本的 C 语言知识,包括 C 数据型别、什么是函式、什么是回传值、关于指针的知识以及基本的 C 语言内存管理。
  • Objective-C,是 C 的 衍生语言,继承了所有 C 语言的特性。是有一些例外,但是它们不是继承于 C 的语言特性本身。
  • nil:在 C/C++ 你 或许曾使用过 NULL,而在 Objective-C 中 则是 nil。不同之处是你可以传递讯息给 nil(例如 [nil message];),这是完全合法的,然而你却不能对 NULL 如法炮制。
  • BOOLC 没 有正式的布尔型别,而在 Objective-C 中也不是「真的」有。它是包含在 Foundation classes(基本类别 库)中(即 imp<wbr></wbr>ort NSObject.hnil 也是包括在这个头文件内)。BOOL Objective-C 中有两种型态:YES NO, 而不是 TRUE FALSE
  • #imp<wbr></wbr>ort vs #include:就如同你在 hello world 范例中看到的,我们使用了 #imp<wbr></wbr>ort#imp<wbr></wbr>ort gcc 编译程序支援。我并不建议使用 #include#imp<wbr></wbr>ort 基本上跟 .h 档头尾的 #ifndef #define #endif 相同。许多程序员们都同意,使用这些东西这是十分愚蠢的。无论如何,使用 #imp<wbr></wbr>ort 就对了。这样不但可以避免麻烦,而且万一有一天 gcc 把它拿掉了,将会有足够的 Objective-C 程序员可以坚持保留它或是将它放回来。偷偷告诉你,Apple 在它们官方的程序代码中也使用了 #imp<wbr></wbr>ort。所以万一有一天这种事真的发生, 不难预料 Apple 将会提供一个支持 #imp<wbr></wbr>ort gcc 分支版本。
  • Objective-C 中, method message 这两个字是可以互换的。不过 messages 拥有特别的特性,一个 message 可以动态的转送给另一个对象。在 Objective-C 中,呼叫对象上的一个讯息并不一定表示对象真的会实作这个讯息,而是对象知道如何以某种方式去实作它,或是转送给知道如何实作的对象。
  • 编译 hello world
    • hello.m

§ #imp<wbr></wbr>ort <stdio.h>

§

§ int main( int argc, const char *argv[] ) {

§ printf( "hello world/n" );

§ return 0;

}

    • 输出

hello world

  • Objective-C 中使用 #imp<wbr></wbr>ort 代替 #include
  • Objective-C 的预设扩展名是 .m

优点与缺点

  • 优点
    • Cateogies
    • Posing
    • 动态识别
    • 指标计算
    • 弹性讯息传递
    • 不是一个过度复杂的 C 衍生语言
    • 可透过 Objective-C++ C++ 结合
  • 缺点
    • 不支持命名 空间
    • 不支持运算符多载(虽然这常常被视为一个优点,不过正确地使用运算符 多载可以降低程序代码复杂度)
    • 语言里仍然有些讨厌的东西,不过不比 C++ 多。
  • 创建 classes
    • @interface
      • Fraction.h

§ #imp<wbr></wbr>ort <Foundation/NSObject.h>

§

§ @interface Fraction: NSObject {

§ int numerator;

§ int denominator;

§ }

§

§ -(void) print;

§ -(void) setNumerator: (int) d;

§ -(void) setDenominator: (int) d;

§ -(int) numerator;

§ -(int) denominator;

§ @end

      • NSObjectNeXTStep Object 的缩写。因为它已经改名为 OpenStep,所以这在今天已经不是那么有意义了。
      • 继承(inheritance) 以 Class: Parent 表示,就像上面的 Fraction: NSObject
      • 夹在 @interface Class: Parent { .... } 中的称为 instance variables
      • 没有设定访问权限(protected, public, private)时,预设的访问权限为 protected。设定权限的方式将在稍后说明。
      • Instance methods 跟在成员变数(即 instance variables)后。格式为:scope (returnType) methodName: (parameter1Type) parameter1Name;
        • scope class instance 两 种。instance methods - 开头,class level methods + 开 头。
      • Interface 以一个 @end 作 为结束。
    • @implementation
      • Fraction.m

§ #imp<wbr></wbr>ort "Fraction.h"

§ #imp<wbr></wbr>ort <stdio.h>

§

§ @implementation Fraction

§ -(void) print {

§ printf( "%i/%i", numerator, denominator );

§ }

§

§ -(void) setNumerator: (int) n {

§ numerator = n;

§ }

§

§ -(void) setDenominator: (int) d {

§ denominator = d;

§ }

§

§ -(int) denominator {

§ return denominator;

§ }

§

§ -(int) numerator {

§ return numerator;

§ }

@end

      • Implementation @implementation ClassName 开始,以 @end 结束。
      • Implement 定义好的 methods 的方式,跟在 interface 中宣告时很近似。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值