说明
Objective-C是C语言的严格超集--任何C语言程序不经修改就可以直接通过Objective-C编译器,在Objective-C中使用C语言代码也是完全合法的。Objective-C被描述为盖在C语言上的薄薄一层,因为Objective-C的原意就是在C语言主体上加入面向对象的特性。
扩展名
扩展名 | 内容类型 |
---|---|
.h | 头文件。头文件包含类,类型,函数和常数的声明。 |
.m | 源代码文件。这是典型的源代码文件扩展名,可以包含 Objective-C 和 C 代码。 |
.mm | 源代码文件。带有这种扩展名的源代码文件,除了可以包含Objective-C和C代码以外还可以包含C++代码。仅在你的Objective-C代码中确实需要使用C++类或者特性的时候才用这种扩展名。 |
函数
1、函数不带参数 (函数名: f)
-(int) f
2、带一个参数(函数名 f:x)
-(int) f:(int)x
类似c语言中的 int f(int x) 函数
3、带两个参数 (函数名 f::
)
-(float) f:int(x) :(int) y
类似c语言中的 float f(int x, int y) 函数
上述函数可以改为
-(float) f:int(x) g:(int) y
这里g表示标签,函数名是f:g:, 第一个参数不能有标签,事实上函数名就是第一个参数的标签
-(returnType)methodName:(typeName)variable1 标签:(typeName)variable2;
-(void)calculateAreaForRectangleWithLength:(CGfloat)length andBreadth:(CGfloat)breadth;
对象之间消息传递(对象互相调用方法)
C++
obj.method(argument);
OC
[obj method: argument];
OC这样设计的好处是,运行期间才处理消息,允许发送未知消息给对象。不会造成程序崩溃,只会抛出异常。
字符串
Objective-C提供了一个助记符可以方便地从常量值创建NSString对象。要使用这个助记符,你需要做的全部事情,是在普通的双引号字符串前放置一个@符号
NSString* myString = @"My String\n";
NSString* anotherString = [NSString stringWithFormat:@"%d %s", 1, @"String"];
// 从一个C语言字符串创建Objective-C字符串
NSString* fromCString = [NSString stringWithCString:"A C string"
encoding:NSASCIIStringEncoding];
类
定义(interface)与实现(implementation)
- 定义(interface)部分包含了类声明和实例变量的定义,以及类相关的方法。
- 实现(implementation)部分包含了类方法的实际代码。
Interface
@interface MyObject : NSObject {
int memberVar1; // 实体变量
id memberVar2;
}
+(return_type) class_method; // 类方法
-(return_type) instance_method1; // 实例方法
-(return_type) instance_method2: (int) p1;
-(return_type) instance_method3: (int) p1 andPar: (int) p2;
@end
- 这个类继承自 NSObject 基础类。
- 类声明总是由 @interface 编译选项开始,由 @end 编译选项结束。
- 类名之后的(用冒号分隔的)是父类的名字。
- 类的实例(或者成员)变量声明在被大括号包含的代码块中。
- 实例变量块后面就是类声明的方法的列表。每个实例变量和方法声明都以分号结尾。
- 类的定义文件遵循C语言之惯例以.h为后缀,实现文件以.m为后缀。
- 方法前面的 +/- 号代表函数的类型:加号(+)代表类方法(class method),不需要实例就可以调用,与C++ 的静态函数(static member function)相似。减号(-)即是一般的实例方法(instance method)。
Objective-C定义一个新的方法时,名称内的冒号(:)代表参数传递,不同于C语言以数学函数的括号来传递参数。
- (void) setColorToRed: (float)red Green: (float)green Blue:(float)blue; /* 宣告方法*/
[myColor setColorToRed: 1.0 Green: 0.8 Blue: 0.2]; /* 呼叫方法*/
implementation
实现区块则包含了公开方法的实现,以及定义私有(private)变量及方法。 以关键字@implementation作为区块起头,@end结尾。
@implementation MyObject {
int memberVar3; //私有實體變數
}
+(return_type) class_method {
.... //method implementation
}
-(return_type) instance_method1 {
....
}
-(return_type) instance_method2: (int) p1 {
....
}
-(return_type) instance_method3: (int) p1 andPar: (int) p2 {
....
}
@end
创建对象
Objective-C创建对象需通过alloc以及init两个消息。alloc的作用是分配内存,init则是初始化对象。 init与alloc都是定义在NSObject里的方法,父对象收到这两个信息并做出正确回应后,新对象才创建完毕。以下为范例:
MyObject * my = [[MyObject alloc] init];
在Objective-C 2.0里,若创建对象不需要参数,则可直接使用new
MyObject * my = [MyObject new];
参考资料
https://www.runoob.com/w3cnote/objective-c-tutorial.html
https://www.runoob.com/ios/ios-objective-c.html