没有合适的资源?快使用搜索试试~ 我知道了~
首页Objective-C 入门指南 中文
Objective-C 入门指南 中文

Objective-C 入门指南 中文 Objective-C 入门指南 Objective-C 入门指南 Objective-C 入门指南 Objective-C 入门指南
资源详情
资源评论
资源推荐

Objective-C 入门指南
目录
开始................................................................................................................................................... 1
下载这篇教程 ........................................................................................................................... 1
设定环境................................................................................................................................... 1
前言................................................................................................................................................... 1
编译 hello world .............................................................................................................................. 2
创建 classes ..................................................................................................................................... 2
@interface................................................................................................................................. 2
@implementation ..................................................................................................................... 2
把他们组合在一起 ................................................................................................................... 2
详细说明........................................................................................................................................... 1
多个参数................................................................................................................................... 1
构造子(Constructors) .......................................................................................................... 2
存取权限........................................................................................................................................... 2
Class level access ....................................................................................................................... 2
异常(Exceptions) ................................................................................................................. 4
继承、多态(Inheritance, Polymorphism)以及其他实体导向功能 ........................................... 8
Id 类型 ...................................................................................................................................... 8
继承(Inheritance) .............................................................................................................. 12
动态识别(Dynamic types) ................................................................................................. 15
Categories ............................................................................................................................... 17
Posing ...................................................................................................................................... 20
Protocols ................................................................................................................................. 21
内存管理......................................................................................................................................... 26
Retain and Release(保留与释放) ...................................................................................... 26
Dealloc..................................................................................................................................... 27
Autorelease Pool ..................................................................................................................... 31
Foundation framework classes ....................................................................................................... 33
NSArray ................................................................................................................................... 33
NSDictionary ........................................................................................................................... 35
优点与缺点..................................................................................................................................... 37
优点......................................................................................................................................... 37
缺点......................................................................................................................................... 37
更多资讯......................................................................................................................................... 37

Objective-C 入门指南
1
开始
下载这篇教程
所有这篇初学者指南的原始代码都可以在 objc.tar.gz 下载。这篇教程中的许多反例都是
由 Steve Kochan 在 Programming in Objective-C. 一书中撰写。如果你想得到更多详细资料及
范例,请直接参考该书。本网站所刊登的所有范例都经过他的允许,所以请勿复制转载。
设定环境
Linux/FreeBSD:安装 GNUStep
为了编译 GNUstep 的应用程序,必须先执行位于/usr/GNUstep/System/Makefiles/G
NUstep.sh 的 GNUstep.sh 这个文件。这个路径取决于你的系统环境,有些是在/usr,
some /usr/lib,有些是 /usr/local。如果你的 shell 是以 csh/tcsh 为基础的 shell,
则应该改用 GNUStep.csh。建议把这个指令放在.bashrc 或.cshrc 中。
Mac OS X: 安装 XCode
Windows NT 5.X:安装 cygwin 或 mingw,然后安装 GNUStep
前言
这篇教程是建立在假设你已经有一些基本的 C 语言知识,包括 C 数据类型、什么是函
数、设么是返回值、关于指针的知识以及基本的 C 语言内存管理。如果您没有这些背景知识,
我非常建议你读一读 K&R 的书:The C Programming Language。这是 C 语言的设计者所写
的书。
Objective-C 是 C 的衍生语言,继承了所有 C 语言的特性,但是有一些例外,他们不是继
承与 C 语言的特性本身的。
nil:在 C/C++里你或许曾经使用过 NULL,而在 Objective-C 中则是 nil。不同之处是你可
以传递消息给 nil(例如[nil message]),这是完全合法的,但是你却不能对 NULL 做这样的操
作。
BOOL:C 没有正式的布尔类型,而在 Objective-C 中也不是“真的”有。它是包含在 Fo
undation classes(基础类库)中(即 import NSObject.h,nil 也是包括在这个头文件中的)。
BOOL 在 Objective-C 中有两种取值:YES 或 NO,而不 C 语言中的是 TRUE 或 FALSE。
#import vs #include:就如同你在 hello world 范例中看到的,我们使用了#import。#i
mport 由 gcc 编译器支持。我并不建议使用#include,#import 基本上跟.h 头文件的#ifndef #
define #endif 相同。许多程序员都同意,使用这些东西是非常愚蠢的。无论如何,使用#i
mport 就对了。这样不但可以避免麻烦,而且万一有一天 gcc 把它拿掉了,将会有足够的 O
bjective-C 程序员可以坚持保留它或是将它放回来。偷偷告诉你,Apple 在它们官方的程序代
码中也使用了#import。所以万一有一天这种事真的发生,不难预料 Apple 将会提供一个支
持 #import 的 gcc 分支版本。

Objective-C 入门指南
2
在 Objective-C 中,方法 及 message 这两个字是可以互换的。不过 messages 拥有特别
的特性,一个 message 可以动态的传送给另一个实体。在 Objective-C 中,调用实体上的一
个消息并不一定表示实体真的会响应这个消息,而是实体知道如何以某种方式去响应它,或
是传送给知道如何响应的实体。
本文大部分范例都是基于 Programming in Objective-C," Copyright © 2004 by Sams P
ublishing 一书中的范例,并经过允许而刊登。
编译 hello world
hello.m
#import <stdio.h>
int main( int argc, const char *argv[] )
{
printf( "hello world\n" );
return 0;
}
输出: LLO WORLD
在 Objective-C 中使用 #import 代替 #include ,Objective-C 的预设文件名是.m
创建 classes
@interface
Fraction.h
#import <Foundation/NSObject.h>
@interface Fraction: NSObject
{
int numerator;
int denominator;
}
-(void) print;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;
-(int) numerator;
-(int) denominator;
@end
NSObject:NeXTStep Object 的缩写。因为它已经改名为 OpenStep,所以这在今天已经不是
那么有意义了。
继承(inheritance)以 Class: Parent 表示,就像上面的 Fraction: NSObject。
夹在 @interface Class: Parent { .... } 中的称为 instance variables。
没有设定存取权限(protected, public, private)时,预设的存取权限为 protected。设定权限
的方式将在稍后说明。

Objective-C 入门指南
2
Instance 方法 s 跟在成员变量(即 instance variables)后。格式为:scope(returnType) 方法
Name: (parameter1Type) parameter1Name;
scope 有 class 或 instance 两种。instance 方法 s 以”-“开头,class level 方法 s 以”+”开头。
Interface 以一个@end 作为结束。
@implementation
Fraction.m
#import "Fraction.h"
#import <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 定义好的方法 s 的方式,跟在 interface 中定义时很近似。
把他们组合在一起
main.m

Objective-C 入门指南
1
#import <stdio.h>
#import "Fraction.h"
int main( int argc, const char *argv[] )
{ //create a new instance
Fraction *frac = [[Fraction alloc] init];
// set the values
[frac setNumerator: 1];
[frac setDenominator: 3];
// print it
printf( "The fraction is: " );
[frac print];
printf( "\n" );
// free memory
[frac release];
return 0;
}
输出: The fraction is: 1/3
FRACTION *FRAC = [[FRACTION ALLOC] INIT];
这行代码中有很多重要的东西。
在 Objective-C 中调用方法 s 的方法是 [object 方法],就像 C++ 的 object->方法()。
Objective-C 没有 value 类型。所以没有像 C++的 FRACTION FRAC; FRAC.PRINT();这
类的东西。在 Objective-C 中完全使用指针来处理数据。
这行代码实际上做了两件事:[Fraction alloc]调用了 Fraction class 的 alloc 方法。这就像
malloc 内存,这个动作也做了一样的事情。
[object init]是一个构造(constructor)调用,负责初始化对象中的所有变量。它调用了
[Fraction alloc]返回的 instance 上的 init 方法。这个行为非常普遍,所以通常以一行代码完成:
Object *var = [[Object alloc] init];
[frac setNumerator: 1]非常简单。它调用了 frac 上的 setNumerator 方法并传入 1 为参数。
如同每个 C 的变体般,Objective-C 也有一个用以释放内存的方式:release。它继承自 NSObject,
这个方法在之后会有详细的说明。
详细说明
多个参数
目前为止我还没有演示如何传递多个参数。这个语法乍看之下不是很直观,不过它却是
来自一个十分受欢迎的 Smalltalk 版本。
Fraction.h
-(void) setNumerator: (int) n andDenominator: (int) d;
剩余43页未读,继续阅读















安全验证
文档复制为VIP权益,开通VIP直接复制

评论28