一、Objective-C与C++的区别
1.1 OC面向对象的特点
Objective-C是⼀一门面向对象的编程语⾔言:它可以对类和对象进⾏行管理; 像在C++中⼀一样,把头⽂文件和实现⽂文件分开写是非常有用的。
ObjC使用.h作为头⽂文件的后缀,使用.m作为实现⽂文件的后缀。并且在ObjC中, 使用 #import 包含头⽂文件,⽽而不是 #include。事实上,在c语⾔言或者C++语⾔言中, 为了防⽌止头⽂文件被重复包含,需要使用头⽂文件预处理防⽌止头⽂文件的重复包含。而 #import本身就有防⽌止头⽂文件被重复包含的功能。

mType (returnType) name1:(type1)param1 name2:(type2)param2…
方法类型(返回值类型) 方法名1:(参数1类型)参数名 方法名2:(参数2类型)参数2名称
mType:方法类型
•・ returnType:返回值类型
•・ name1/name2:标签名
•・ type1/type2:参数类型
•・ param1,param2:参数名字
OC中方法(函数)的规则:
方法需要参数时,方法名后要有冒号
方法名的每⼀一部分:标签 冒号前面是标签,
冒号后面是参数类型和参数名

类中的方法分为两种:类方法和实例⽅方法
即方法中的⽅方法类型mType分为两种:分别用 “+” 和 “-” 标识。
•・ 如果类型为 + ,则表示方法为类⽅方法(相当于c++中的静态成员函数)
•・ 如果类型为 – ,则表示方法为实例⽅方法(相当于c++中的非静态成员函数)
//Circle.h
#import <Foundation/Foundation.h>
static int sum = 2; //ERROR OC不⽀支持静态实例变量,⽽而是通过静态全局变量来实现 静态实例变量的功能;
@interface Circle : NSObject{
int radius;
int x;
int y;
}
- (void)print; //相当于c++的 void print();
- (void)setR:(int)_r andX:(int)_x andY:(int)_y;
+ (int)getNum;
- (void)func;
@end
//Circle.m
#import "Circle.h"
@implementation Circle
- (void)print{
NSLog(@"半径:%d xy坐标:(%d,%d)",radius,x,y);
}
- (void)setR:(int)_r andX:(int)_x andY:(int)_y{
radius = _r;
x = _x;
y = _y;
}
+ (int)getNum{
return sum;
}
- (void)func{
[self print];
}
@end
//main.m
#import <Foundation/Foundation.h>
#import "Circle.h"
@autoreleasepool {
Circle *c = [[Circle alloc]init]; //alloc开辟空间,init初始化
[c print];
[c setR:1 andX:2 andY:3];
[c print];
NSLog(@"%d",[Circle getNum]);
}
OC中方法(函数)的规则:
所有的方法在 @interface…@end 部分声明,在 @implementation…@end 部分实现。
如果一个或多个协议在interface部分列出,则协议中的相关方法可以在该类中实现。
OC中方法实现(函数)的规则:
方法实现时,需要注意的是该方法原型必须和它在interface部分的声明保持一致
实例方法可以通过名字引用本类或者本类中继承过来的实例变量,但是在类方法中,不可以引用实例变量;
在一个方法中,可以使用标识符 self 用作当前对象的引用,来调用当前对象的方法。类似于 C++中的 this 指针。