enhanced
C:加强C,C++
extends C:拓展C,object-c
object-c:在C语言的基础上增加一层最小的面向对象的语法
OC向下兼容C
面试题1:为什么要使用import?import和include的区别?
include和import都是引入头文件,而import引入头文件可以防止重复包含
include它是使用预处理指令防止重复包含,如果没有写预处理指令,则无法防止重复包含
面试题2:import 和 @class的区别
面试题3:Foundation/Foundation.h的作用
1)头文件
2)头文件的位置
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h
3)文件包含了其他的大量头文件
作用:把Foundation.h引入了,等于把OC的库文件都引过来
@autoreleasepool:自动释放池
NSLog函数
NSLog:是Cocoa框架提供的一个方法
面试题:NSLog和printf的差异
1、NSLog会自动换行,而printf不会自动换行
2、NSLog会自动输出时间等项目信息
3、NSLog函数的参数是一个NSString对象,而printf函数的参数是一个字符串常量指针
4、NSLog不能使用%s输出字符串,OC有特有的字符串类NSString
NS前缀:Next Software,防止命名重复
@:1、@“” 表示将字符串转换为NSString对象
2、@标识符 关键字
C与OC的对比
1、源文件对比
1)C语言:.c .o .out .h
2)OC:.m .h
2、基本语法对比
1)C中常用数据类型:基本数据类型,构造类型,指针类型,空类型,定义类型typedef
2)OC中的数据类型:兼容C基本数据类型(布尔型BOOL),Block类型,指针数据类型(类(class),id类型(万能指针)),特殊类型(SEL、nil)
3、变量定义的差异
关键字:1、C语言的关键字都可以在OC中使用
2、OC中新增的关键字,注意以@开头的
4、流程控制语句对比
1)if else
2)switch
3)while
4)do while
5)for
OC中并没有增加新的流程控制,而是提供了一种增强型的for循环
//
增强型
for
循环
NSArray *arr = @[ @"one" , @"two" , @"three" ] ;
for ( NSString *str in arr) {
NSLog ( @"%@" , str);
NSArray *arr = @[ @"one" , @"two" , @"three" ] ;
for ( NSString *str in arr) {
NSLog ( @"%@" , str);
}
5、函数的定义和声明差异
1)C语言
2)OC中把函数称之为方法
6、异常捕捉的方法@try...@catch...@finally
1)并不能检测所有的错误
编程的实质:将我们的思维转变成计算机能够识别的语言的一个过程
面向过程:强调的是功能行为,关注的是解决问题需要哪些步骤。
面对对象:将功能封装进对象,强调具备了功能的对象。关注的是解决问题需要哪些对象,面对对象是基于面向过程的。
类:类是具有相似内部状态和运动规律的实体的集合(或统称、抽象)。
对象:即指现实世界中的各种各样的实体,既可以是具体的事物也可以是指抽象的事物。
一个类可以实例化多个对象
类的构成:1、事物名称(类名)
2、属性
3、行为(功能,类的方法)
类的抽象:拥有相同(或者类似)属性和行为的对象都可以抽象出一个类
抽象类的方法:一般名词都是类(名词提炼法)
类的声明和实现
类:1、
.
h类的声明文件,用于声明成员变量、方法。类的声明使用关键字@interface和@end
注意:声明只是说明一下方法名、方法的返回值类型、方法接收得参数类型
2、.m类的实现文件,用于实现.h中声明的方法。类的实现使用关键字@implementation和@end
方法:方法的声明和实现,都必须以+或者-开头
1、+ 表示类方法(静态方法)
2、- 表示对象方法(动态方法)
3、在.h中声明的多有方法作用域都是public类型,不能更改
成员变量(实例变量、属性):1、@public 全局都可以访问
2、@protected 只能在类的内部和子类中访问
3、@private 只能在类内部访问
类的定义分为两部分:
1)类的声明(规定当前类的:类名、属性、方法)
@interface 类名:父类名
NSObject
{
// 类的属性
}
// 类的行为
@end
2 )类的实现(实现具体行为)
// 类的属性
}
// 类的行为
@end
2 )类的实现(实现具体行为)
@implementation 类名
//
行为的具体实现
@end
创建对象并访问成员变量:1、[类名 new]; //类名:相当于定义一个结构体类型,新的类型
1)向计算机申请内存空间
2)给类中的每一个成员初始化值
3)返回新申请的空间的首地址
2、类名 *p = [类名 new]; //两种理解方式
1)定义了一个类名类型的指针变量,指针变量指向新申请的内存空间
2)用该类实例化了一个实例对象,对象的名称是p
3、用指针间接访问实例变量值
1)p->属性
无参方法的声明和调用:1、行为在@interface和@end之内,大括号之外
2、+类方法(不可以访问成员变量),-对象方法(
可以访问成员变量
)
3、-(void)方法名;
4、调用 [类名或对象名 方法];
有参方法的声明和调用:1、方法类型(返回值类型)方法名:(参数类型) 参数名; //一个参数的方法
2、
方法类型(返回值类型)方法名:(参数类型1) 参数名1 and:(参数类型2) 参数名2; //两个参数
3、方法名: 方法名: and:
4、调用 [类名或对象名 方法名:参数 and:参数]; //类方法类名,对象方法对象名
5、and的后面还可以定义方法名→ and方法名:
#import
<Foundation/Foundation.h>
//iphone 类的声明
typedef enum color{kColorWhite, kColorBlack, kColorTHJ} iColor;
@interface iPhone : NSObject
{
// 类的属性
@public
// 手机颜色
iColor _color;
// 手机的尺寸
float _size;
// 手机的 CPU
NSString *_cpu;
}
// 类的行为 ( 方法 )
// 查看手机的信息 把手机的实例变量值打印出来
-( void )aboutMyPhone;
// 打电话,需要一个参数,参数就是电话号码
-( void )callPhone:( NSString *) telNum;
// 发短信,给指定号码发送短信,短信的内容可以指定,两个参数
-( void )sendMessage:( NSString *) telNum andContent:( NSString *) content;
@end
//iPhone 类的实现
@implementation iPhone
// 行为的具体实现
// 查看手机的信息 把手机的实例变量值打印出来
-( void )aboutMyPhone {
NSLog ( @" 颜色: %d, 尺寸: %.2f, CPU : %@" , _color , _size , _cpu );
}
// 打电话,需要一个参数,参数就是电话号码
-( void )callPhone:( NSString *) telNum {
NSLog ( @" 给 %@ 打电话 " , telNum);
}
// 发短信,给指定号码发送短信,短信的内容可以指定,两个参数
-( void )sendMessage:( NSString *) telNum andContent:( NSString *) content {
NSLog ( @" 给 %@ 发短信,短信内容 : %@" , telNum, content);
}
@end
int main( int argc, const char * argv[]) {
@autoreleasepool {
// 创建对象
iPhone *iPhone7Plus = [ iPhone new ];
// 设定手机的信息
iPhone7Plus-> _color = kColorTHJ ;
iPhone7Plus-> _cpu = @"A20" ;
iPhone7Plus-> _size = 7.9f ;
// 调用方法
[iPhone7Plus aboutMyPhone ];
// 给 10086 打电话
[iPhone7Plus callPhone : @"10086" ];
// 给 10086 发短信
[iPhone7Plus sendMessage : @"10086" andContent : @" 你好,请问联通的电话多少? " ];
}
return 0 ;
//iphone 类的声明
typedef enum color{kColorWhite, kColorBlack, kColorTHJ} iColor;
@interface iPhone : NSObject
{
// 类的属性
@public
// 手机颜色
iColor _color;
// 手机的尺寸
float _size;
// 手机的 CPU
NSString *_cpu;
}
// 类的行为 ( 方法 )
// 查看手机的信息 把手机的实例变量值打印出来
-( void )aboutMyPhone;
// 打电话,需要一个参数,参数就是电话号码
-( void )callPhone:( NSString *) telNum;
// 发短信,给指定号码发送短信,短信的内容可以指定,两个参数
-( void )sendMessage:( NSString *) telNum andContent:( NSString *) content;
@end
//iPhone 类的实现
@implementation iPhone
// 行为的具体实现
// 查看手机的信息 把手机的实例变量值打印出来
-( void )aboutMyPhone {
NSLog ( @" 颜色: %d, 尺寸: %.2f, CPU : %@" , _color , _size , _cpu );
}
// 打电话,需要一个参数,参数就是电话号码
-( void )callPhone:( NSString *) telNum {
NSLog ( @" 给 %@ 打电话 " , telNum);
}
// 发短信,给指定号码发送短信,短信的内容可以指定,两个参数
-( void )sendMessage:( NSString *) telNum andContent:( NSString *) content {
NSLog ( @" 给 %@ 发短信,短信内容 : %@" , telNum, content);
}
@end
int main( int argc, const char * argv[]) {
@autoreleasepool {
// 创建对象
iPhone *iPhone7Plus = [ iPhone new ];
// 设定手机的信息
iPhone7Plus-> _color = kColorTHJ ;
iPhone7Plus-> _cpu = @"A20" ;
iPhone7Plus-> _size = 7.9f ;
// 调用方法
[iPhone7Plus aboutMyPhone ];
// 给 10086 打电话
[iPhone7Plus callPhone : @"10086" ];
// 给 10086 发短信
[iPhone7Plus sendMessage : @"10086" andContent : @" 你好,请问联通的电话多少? " ];
}
return 0 ;
}