object c 基础的东西了

减号表示一个函数、或者方法、或者消息的开始 括号可以认为是如何调用你刚才写的这个方法,通常在Objective-C里说“消息”。
同一个数组可以保存不同的对象

C用NULL,OC用nil
Objective-C 有种叫做 id 的型别,它的运作有时候像是 void*,不过它却严格规定只能用在对象。
基本类别库 import NSObject.h;BOOL型为YES or NO
#import vs #include:#import。#import 由 gcc 编译器支持。我并不建议使用 #include,#import 基本上跟 .h 档头尾的 #ifndef #define #endif 相同。
Objective-C 的预设扩展名是 .m

类:@interface... @end
Implementation 以 @implementation ClassName 开始,以 @end 结束,用来定义类里的函数

继承(inheritance)
以 Class: Parent 表示,就像上面的 Fraction: NSObject
在 Objective-C 中呼叫 methods 的方法是 [object method],就像 C++ 的 object->method()
[object init] 是一个建构子(constructor)呼叫,负责初始化对象中的所有变量。
[frac setNumerator: 1] 非常简单。它呼叫了 frac 上的 setNumerator method 并传入 1 为参数
Objective-C 也有一个用以释放内存的方式: release
传递多重参数用set..and:[frac2 setNumerator: 1 andDenominator: 5];单重时只用set
加入其它参数的方法就跟加入第二个时一样,即 method:label1:label2:label3: ,而呼叫的方法是 obj

method: param1 label1: param2 label2: param3 label3: param4]

建构子(Constructors)
@interface 里的宣告就如同正常的函式
@implementation 使用了一个新的关键词:super
使用 [super init] 来存取 Super constructor,这个动作需要适当的继承设计

存取权限
预设的权限是 @protected
就像 C++ 中 private: [list of vars] public: [list of vars] 的格式,它只是改成了@private,

@protected, 等等

Class level access
static int count = 0; 这是 class variable 宣告的方式。+(int) initCount; 这是回传 count 值的

实际 method。+(void) initialize method is 在 Objective-C 开始执行你的程序时被呼叫,而且它也

被每个 class 呼叫。

异常情况(Exceptions)
注意:异常处理只有 Mac OS X 10.3 以上才支持
Exceptions(异常情况)的丢出不需要扩充(extend)NSException 对象,你可简单的用 id 来代表它:

@catch ( id e ) { ... }


继承、多型(Inheritance, Polymorphism)以及其它对象导向功能

Objective-C 与 Java 跟 C++ 不一样,你在呼叫一个对象的 method 时,并不需要知道这个对象的型别

。当然这个 method 一定要存在,这称为 Objective-C 的讯息传递。你不需要知道你呼叫 method 的那

个东西是什么型别,如果这个对象对这个讯息有反应,那就会唤起这个 method。

继承(Inheritance)
当你扩充你的 super class(所以只能有一个 parent),你想自订这个 super class 的 method,只要

简单的在你的 child class implementation 里放上新的实作内容即可。

动态识别(Dynamic types)
如-(BOOL) isKindOfClass: classObj,即is object a descendent or member of classObj

Categories
当你想要为某个 class 新增 methods,你通常会扩充(extend,即继承)它。然而这不一定是个完美解

法,特别是你想要重写一个 class 的某个功能,但你却没有原始码时。Categories 允许你在现有的

class 加入新功能,但不需要扩充它。Ruby 语言也有类似的功能。包括-(Fraction*) add: (Fraction*)

f; -(Fraction*) mul: (Fraction*) f; -(Fraction*) div: (Fraction*) f; -(Fraction*) sub:

(Fraction*) f;等

Posing
Posing 有点像 categories,但是不太一样。它允许你扩充一个 class,并且全面性地的扮演(pose)这

个 super class。如果你让 NSArrayChild 扮演 NSArray,则在你的程序代码中所有的 NSArray 都会自

动被替代为 NSArrayChild。[FractionB poseAsClass: [Fraction class]];

Protocols
Objective-C 里的 Protocol 与 Java 的 interface 或是 C++ 的 purely virtual class 相同。
protocol 的宣告十分简单,基本上就是 @protocol ProtocolName (methods you must implement) @end
要遵从(conform)某个 protocol,将要遵从的 protocols 放在 <> 里面,并以逗点分隔。如:

@interface SomeClass <Protocol1, Protocol2, Protocol3> 。
protocol 要求实作的 methods 不需要放在 header 档里面的 methods 列表中。
可以使用 @protocol 来测试对象是否遵从接口。如果对象遵从这个接口,[object conformsToProtocol:
@protocol( SomeProtocol )] 会回传一个 YES 型态的 BOOL 对象。



内存管理

Retain and Release(保留与释放)
Retain 以及 release 是两个继承自 NSObject 的对象都会有的 methods。每个对象都有一个内部计数器

,可以用来追踪对象的 reference 个数。如果对象有 3 个 reference 时,不需要 dealloc 自己。但是

如果计数器值到达 0 时,对象就得 dealloc 自己。[object retain] 会将计数器值加 1(值从 1 开始

),[object release] 则将计数器值减 1。如果呼叫 [object release] 导致计数器到达 0,就会自动

dealloc。
你可以呼叫 [obj retainCount] 来取得计数器的 int 值。

Dealloc
当你的对象包含其它对象时,就得在 dealloc 自己时释放它们。Objective-C 的一个优点是你可以传递

讯息给 nil,所以不需要经过一堆防错测试来释放一个对象。
每个 set method 里的三个动作的顺序非常重要。假设你把自己当参数传给一个自己的 method(有点怪

,不过确实可能发生)。若你先 release,「然后」才 retain,你会把自己给解构(destruct,相对于

建构)!这就是为什么应该要 1) retain 2) release 3) 设值 的原因

Autorelease Pool
当你想用 NSString 或其它 Foundation framework classes 来做更多程序设计工作时,你需要一个更有

弹性的系统,也就是使用 Autorelease pools。当开发 Mac Cocoa 应用程序时,autorelease pool 会自

动地帮你设定好。
#import <Foundation/NSAutoreleasePool.h>
在 Objective-C 有两种管理内存的方法, 1) retain and release or 2) retain and

release/autorelease。对于每个 retain,一定要对应一个 release 「或」一个 autorelease。


Foundation framework classes

Foundation framework 地位如同 C++ 的 Standard Template Library。不过 Objective-C 是真正的动

态识别语言(dynamic types),所以不需要像 C++ 那样肥得可怕的样版(templates)。这个 ramework

包含了对象组、网络、执行绪,还有更多好东西。

NSArray
数组有两种(通常是 Foundation classes 中最数据导向的部分),NSArray 跟 NSMutableArray,顾名

思义,mutable(善变的)表示可以被改变,而 NSArray 则不行。这表示你可以制造一个 NSArray 但却

不能改变它的长度。
NSArray *arr = [[NSArray alloc] initWithObjects: @"Me", @"Myself", @"I", nil];
排序(sorting)展示如何用 selector 来排序一个对象
NSEnumerator 很像 Java 的列举系统

NSDictionary
#import <Foundation/NSDictionary.h> (不明白包含哪些东东)

你可能感兴趣的:(Objective-C)