OC:基础知识汇总

说明

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lvan的前端笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值