Objective-C 基础

Hello, World!

1
2
3
4
5
6
7
8
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
@autoreleasepool {
NSLog(@"Hello, World!");
}
return 0;
}

Command Line Compile and Run

1
clang -fobjc-arc hello.m -o hello && ./hello

Instance and Method

Objective-C 采用特定的语法对类和实例应用方法: [ClassOrInstance method] 以及将特定的值作为方法参数 [ClassOrInstance argc: value]

Objective-C Class

一个程序在逻辑上分为3个部分:

  • @interface 部分
  • @implementation 部分
  • program 部分

其中,@interface 部分用于描述类和类的方法; @implementation 部分用于描述数据(类对象的实例变量存储的数据),并实现在接口中声明方法的实际代码;program 部分的程序代码实现了程序的预期目的

@interface 部分

按照约定,类名以大写字母开头,但这不是必须的

1
2
3
@interface NewClassName: ParentClassName
-(returnType) methodName: (parameterType) parameterName [argName]: (otherType) otherName
@end

实例方法以负号(-)开头,实例方法能够对类的实例执行一些操作,如设置值;

类方法以正号(+)开头,类方法是对类本身执行某些操作的方法,如创建类的新实例

@implementation 部分

1
2
3
4
5
6
@implementation NewClassName
{
memberDeclarations;
}
methodDefinitions;
@end

NewClassName 表示的名称与 @interface 部分的名称相同

@implementation 部分中的 methodDefinitions 部分包含在 @interface 部分指定的每个方法的代码中,每种方法的定义通过方法的类型(或者实例)、它的返回值和参数进行标识,并将方法的代码放入一对花括号中

program 部分

program 部分包含解决特定问题的代码,可以跨越多个文件,但必须存在仅有一个的 main 函数

新建一个类的实例:instance = [[ClassName alloc] init]

调用实例的方法:[instance method: value]

Data Type

Objective-C 的基本类型有:charintfloatdouble
Objective-C 的限定词有:longlong longshortunsignedsigned
id 类型:id 数据类型可存储任何类型的对象

Loop Structure

for 语句

1
2
3
for (init_experssion; loop_condition; loop_expression) {
program statement;
}

while 语句

1
2
3
while (expression) {
program statement
}

do 语句

1
2
3
do {
program statement
} while (expression)

breakcontinue

Choice Structure

if 语句

1
2
3
4
5
6
7
if (expression1) {
program statement
} else if (expression2) {
program statement
} else {
program statement
}

switch 语句

1
2
3
4
5
6
7
8
9
10
11
switch (expression) {
case value1:
program statement
break;
case value2:
program statement
break;
default:
program statement
break;
}

conditional 运算符

条件运算符也叫三目运算符

1
condition ? expression1 : expression2

存取方法

在接口部分使用 @property 指令标识属性,在实现部分使用 @synthesize 指令标识属性,这样编译器就会自动生成存取方法,无需自己编写 gettersetter 方法了;当然,你也可以不在实现部分使用 @synthesize 指令,那么编译器会生成以下划线(_)开头的实例变量名

Root Class

1
2
3
@interface ClassName: NSObject
statement
@end

NSObject 是任何类的根类

使用 @try 处理异常

1
2
3
4
5
6
@try {
statement
}
@catch (NSeception *exception) {
statement
}

override init method

1
2
3
4
5
6
7
8
- (instancetype) init
{
self = [super init];
if (self) {
// initial statement
}
return self;
}

instancetype 是关键字

Category

将类的定义模块化到相关方法的分类中

1
2
3
@interface ClassName(CategoryName)
category method code
@end

Class’s Extension

类的扩展是一个未命名的分类

1
2
3
4
5
@interface ClassName ()
{
property code
}
method code

Protocol

使用 @protocol 指令定义一个协议

定义:

1
2
3
@protocol ProtocolName
protocol interface
@end

使用:

1
2
3
4
5
@interface InterfaceName: ParentClassName <ProtocolName, otherProtocolName>
method
@optional
optional method
@end

对于没有实现的协议方法,使用 @optional 指令修饰,该指令之后列出的所有方法都是可选的

Conditional Compile

1
2
3
4
5
6
7
#ifdef condition
# define var value
#elif condition
# define var value
#else
# define var value
#endif

Cocoa

术语 Cocoa 总的来说指的是 Foundation 框架、Application Kit 框架和名为 Core Data 的第三方框架

Cocoa Touch

术语 Cocoa Touch 是指 FoundationCore DataUIKit 框架

Reference

[1] Kochan S G . Objective-C程序设计[M]. 电子工业出版社, 2012.