Objective-C概述
Objective-C简称OC,扩充⾃C语⾔的⾯向对象编程语⾔。是OS X和iOS操作系统的主要编程语⾔
OC语⾔的特点
- C语⾔的超集,允许在OC中使⽤C语⾔源代码,编译器兼容C语⾔程序
- 具备完善的⾯向对象特性
- 包含⼀个运⾏时系统
- 类库丰富
⾯向对象编程
- ⾯向对象编程 OOP (Object Oriented Programming )
- ⾯向对象语⾔:C++,Java,C#
- 概念:对象、类、封装、继承、多态等等
面向对象设计具有良好的可扩展性、可重⽤用性。
面向过程 Procedure Oriented
面向对象(Object Oriented -> OO)
基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的方法。
面向对象编程(Object Oriented Programming -> OOP)
解决软件复用的方法,用以提高软件开发效率
优点:
- 大幅提高软件项目的成功率
- 减少维护费
- 提高可移植性和可靠性
面向对象的特征
- 封装性
- 多态性
- 继承性
过程\对象 | ⾯向过程 | ⾯向对象 |
---|---|---|
特点 | 分析解决问题的步骤,实现函数,依次调⽤函数 | 分析某问题需要参与的对象,各个对象的作⽤,多个对象协作完成任务 |
侧重点 | 实现功能 | 对象的设计(具有哪些功能) |
语⾔举例 | C语⾔ | OC,C++,Java等 |
面向对象和面向过程的区别
面向过程:
- 强调的是功能行为;
- 关注的是解决问题需要哪些步骤
面向对象:
- 将功能封装进对象,强调具备了功能的对象
- 关注的是解决问题的是哪些对象
- 面向对象是基于面向过程的
类(Class)
具有相同特征和⾏为的事物的抽象,由3个部分构成
- 类的名称:类名
- 类的属性:一组包含数据的属性
- 类的方法:允许对属性中包含的数据进行操作的方法
类的声明和实现
.h
类的声明文件,用于声明成员变量、方法。关键字:@interface和@end
.m
类的实现文件,用于实现.h中声明的方法。关键字:@implementation和@end,实现类主要是对方法的具体实现
方法的声明和实现
- +表示类方法(静态方法)
- -表示实例方法(动态方法)
- 在.h中声明的所有方法作用域都是public类型,不能修改
对象(Object)
对象是类的实例,类是对象的类型
- 对象是系统中的基本运行实体
- 对象是类类型(class type)的变量
- 一个类可以创建多个对象
- 类是具有相同类型的对象的抽象
创建对象
//类名 Car类型的指针变量 使用类名调用alloc类方法,开辟空间,并用init进行初始化
Car * car = [[Car alloc] init];
只要是用new操作符定义的实体就在会堆内存中开辟一个新的空间
[[Car alloc] init];
在内存中干三件事:
- 开辟存储空间
- 初始化成员变量(写在类声明大括号中的属性就叫成员变量,也叫实例变量)
- 返回指针地址
实例变量操作
每一个对象中都有一份属于自己的属性。
通过 ” 对象->对象成员”(注意声明属性为:@public)的方式操作对象中的成员, 对其中一个对象的成员进行了修改。和另一个对象没有关系
OC学习路线
OC程序注意事项
include与import的异同
- include和import都是引入头文件
- import引入的头文件可以防止重复包含
- include是使用与处理指令防止重复包含的,如果没有写预处理指令,则无法防止重复包含问题
Foundation/Foundation.h
- 是程序的头文件,里面包含了其他的大量的头文件
- 查看方式:comand + 鼠标点击
- 作用:把此文件引入,等于把OC的库文件均引过来了
@autoreleasepool:自动释放池
NSLog
NSLog是Foundation框架提供的OC日志输出函数,与printf功能相同,可格式化输出
NSLog和printf的异同
NSLog(@"Hello,World!");
printf("Hello,World!");
比较 | NSLog | printf |
---|---|---|
换行 | YES | NO |
时间等项目信息 | YES | NO |
参数 | NSString对象 | 字符串常量指针 |
OC占位符
类型 | 关键字 | 占位符 |
---|---|---|
字符型 | char | %c |
短整型 | short int | %hd,%hi,%ho,%hx |
无符号短整型 | unsigned short int | %hu |
整型 | int | %d,%i,%o,%x |
无符号整型 | unsigned int | %u,%o,%x |
长整形 | long int | %ld,%li,%lo,%lx |
无符号长整形 | unsigned long int | %lu,%lo,%lx |
双长整型 | long long int | %lli,%llo,%llx |
无符号双长整型 | unsigned long long int | %llu,%llo,%llx |
浮点数 | float | %f,%e,%g,%a |
双精度浮点数 | double | %f,%e,%g,%a |
长双精度 | long double | %lf,%le,%lg |
指针 | id(pointer) | %p |
对象 | NSObject object | %@ |
字符串 | string | %s |
output character count | %n | |
output characters | %[] | |
accuracy | %% |
NSLog输出
//NSLog格式化输出
NSLog(@"%d,%.2f,%.2f,%c",a,f1,d1,ch);//@表示是字符串
//NSLog(@"%s",str);//语法错误
//NSLog的表示字符串的方法
NSString *str1 = @"张三丰";
NSLog(@"%@",str1);//不是%s,而是%@
NS前缀
@符号的使用
- @”“:表示将一个C的字符串转化为OC中的字符串对象NSString
- @标识符:OC中大部分标识符均是以@开头的(@interface,@end,@class)
OC文件
- .h文件,头文件,包含方法、属性的声明
- .m文件,类的实现文件,参与编译,用于实现类中生命的方法
数据类型
Boolean
用来存放逻辑值:真(!0)假(0)
存储的值:true(真) false(假)
Boolean flag = true;
if(flag){
NSLog(@"真 %d",flag);
}else{
NSLog(@"假 %d",flag);
}
BOOL
也是用来保存逻辑值
存储的值:YES(真) NO(假)
BOOL flag2 = YES;
if(flag2){
NSLog(@"真 %d",flag2);
}else{
NSLog(@"假 %d",flag2);
}
OC中的异常捕捉机制
异常:程序运行的时候有Bug
捕捉机制:排除Bug
@try {
//如果有异常
< #statements#>
}
@catch (NSException *exception) {
//捕捉最具体的异常类型
//
< #handler#>
}
@catch (NSException *ne) {
//捕获一个比较重要的异常类型。
}
@catch (id ue) {
//再次掷出捕获的异常。
}
@finally {
//不管有没有异常finally内的代码都会执行。
< #statements#>
}
流程控制语句
OC中提供一种增强型的for循环
//OC中的增强for循环
NSArray *arr = @[@"one",@"two",@"three"];
for (NSString *str in arr) {
NSLog(@"%@",str);
}
OC的函数
OC中把函数称为方法