A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Edware 中级黑马   /  2015-8-15 23:25  /  610 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

OC和C的对比
1.源文件对比
- C语言中常见源文件.h头文件,.c文件
.h头文件,用于存放函数声明
.c C语言源文件,用于实现头文件中声明的方法
OC中的源文件.h头文件,.m与.mm的实现文件
.h头文件,头文件包含类、方法、属性的声明。
.m/.mm类的实现文件,参与编译的文件,用来实现类中声明的方法

2.数据类型对比
BOOL只有两个取值真和假
NSObject *OC中的对象类型
id动态对象类型,万能指针
SEL选择器数据类型
block代码块数据类型

OC中的类
    Objective-C是一种面向对象的语言,定义类是它的基本能力。
那什么是类呢?类是用来描述对象的,它是一系列方法和属性的集合
    Objective-C的类声明和实现包括两个部分:接口部分和实现部分。
想要定义方法也就C语言中的函数,那么就必须先有类的存在
3.流程控制语句对比
- C语言中使用的流程控制语句OC中都可以应用
```
if 语句
switch语句
while语句
dowhile语句
for语句
break关键字
continue关键字
```
- 增强for循环,用于快速迭代数组或者集合

- C语言for循环
```
for (inti = 0; i< 10; i++){
printf(“%d”,i);
}
```
- OC增强for循环
```
for (NSString * name in NSArray){
NSLog(@”%@”,name);
}
4.函数(方法)定义和声明对比
C语言中函数的声明和实现
函数声明:int sum(inta,int b);
函数实现:int sum(inta,int b){  return a+b; }

OC中的方法
方法声明:- (int)sum:(int) a andB:(int) b;
方法实现:- (int)sum:(int) a andB:(int )b{ return a+b; }

注意: 方法只能写在类里面, 而函数可以写在任何地方
对象方法,使用对象调用的方法
类方法,使用类名调用的方法

```
对象方法
- (id)initWithString: (NSString * )name;

类方法
+ (MyClass *)createMyClassWithString: (NSString *)name;
```
5.面向对象新增语法
属性生成器
     @property
     @synthesize

```
//声明属性
@property (nonatomic,strong)NSString * name;

//合成属性
@synthesize name = _name;
```
分类
分类与继承
使用分类扩展类,无需子类化

```
@interfaceNSString (MyNSString)

- (NSString *) encryptWithMD5;

@end
```
协议
使用协议声明方法
协议类似于C#,java中的接口

```
@protocolMyProtocol

- (void)myProtocolMethod;

@end

6.新增异常处理
用于处理错误信息
格式:
    + @try .... @catch .... @finally

示例

```
//创建对象car
Car *car = [Car new];
@try {
//调用一个没有实现的方法
[car test];
}@catch (NSException *exception) {
NSLog(@"%@",exception.name);
}@finally {
NSLog(@"继续执行!\n");
}

函数与方法对比
对象方法:
    (1)对象方法的实现只能写在@implementation...@end中,对象方法的声明只能写在 @interface...@end中间
    (2)对象方法都以-号开头,类方法都以+号开头
    (3)对象方法只能由对象来调用,类方法只能由类来调用,不能当做函数一样调用
    (4)函数属于整个文件,可以写在文件中的任何位置,包括@implementation...@end中,但写在 @interface...@end会无法识别,函数的声明可以再main函数内部也可以在main函数外部。
    (5)对象方法归类\对象所有
- 函数:
    (1)所有的函数都是平行的
    (2)函数不存在隶属关系
    (3)使用的时候可以直接调用
(4)不可以访问对象中的成员变量

5 个回复

倒序浏览
初来乍到,望各位多多指教。
回复 使用道具 举报
写的很好,有启发
回复 使用道具 举报
感谢光顾。
回复 使用道具 举报
路过 看看是否有黑马币
回复 使用道具 举报
大神啊,赚黑马币这么强。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马