一. oc语言的历史
作者: 布莱德.麦克(Brad Cox)
一,import和include的区别;
import可以防止头文件的重复包含
include不能防止头文件重复包含
二,NSLog 和printf的区别:
1,NSLog可以自动换行, 输出调试信息, printf不能.
2,NSLog 函数的参数是一个NSString 对象
3,printf函数的参数是一个字符串常量指针
三,@符号的含义:
1,@“” 将双引号的C字符串转换为OC的字符串对象NString;
2,OC中的一个特有标示符,很多关键字前面都加@。
四,OC可以访问C源文件中的函数。C不能访问OC中的源文件中的方法。(这里其实是向下兼容)
五.语言特点
源文件对比:
1,C中常见的源文件有.c 和 .h ;
2,OC中常见的源文件有.h 和 .m ;
基本语法对比:
1,数据类型对比:
首先OC兼容C中的所有数据类型;
OC新增了boolean类型、block类型、对象类型、特殊类型SEL和nil 等;
另外,C中不兼容OC中新增的类型;
2,流程控制语句对比;
首先OC兼容了C中所有的流程控制语句;
OC又新增了自己的for in 增强型的循环语句;
//OC中的增强型for循环
for(NSString *str in arr){
NSLog(@"%@",str);
}
3,函数和方法定义声明的对比;
C语言中函数的声明和实现
i.函数声明:
int sum(int a,int b);
ii.函数定义
int sum(int a,int b){
return a+b;
}
OC语言中函数习惯称之为“方法”
i.方法声明:
-(int)sum:(int) a and:(int) b;
ii.方法定义
-(int)sum:(int) a and:(int )b{
return a+b;
}
六.类和对象
什么是类?
通俗一点讲就是 将具有相同属性和行为的实体的向上抽象。
比如:将男人,女人,向上抽象为一类,即为 人;Person类;
将狗,猫,老虎等动物向上抽象为一类,即为动物的类;Animal类等;
类
.h:类的声明文件,用于声明成员变量、方法。类的声明使用关键字@interface和@end。
方法
方法的声明和实现,都必须以 + 或者 - 开头
+ 表示类方法(静态方法)
- 表示对象方法(动态方法) 在.h中声明的所有方法作用域都是public类型,不能更改
什么是对象?
即指现实世界中各种各样的实体。它可以指具体的事物也可以指抽象的事物。
类和对象的抽象关系:
类和对象时分不开的;
每个对象,一定有自己所属的类;
每个类,一定有自己对应的实例;
类由对象的抽象而来;
对象由类的具体实例而来;
七.类的成员组成及访问
组成:
成员变量(属性)
成员方法(行为)
成员访问:
前提:成员变量需要用@public修饰符修饰;
Car *car1=[Car new];
car1->lunzi = 3; // 使用->来访问;
方法访问:
Car *car = [Car new];
[car run];
[Car new];
在内存中干三件事:
1.开辟存储空间
2.初始化成员变量(写在类声明大括号中的属性就叫成员变量,也叫实例变量)
3.返回指针地址
带参数的方法的定义和实现
声明:
注意:冒号也是方法名的一部分。
2、有参方法调用
带参数的方法调用:
第一个OC类
类的使用:1)声明一个类 2)实现一个类
类的声明:(定义属性和声明方法)
@interface 类名 : 父类名
{
//类的属性的定义
} //类的方法声明
@end 类的实现:(方法的实现)
@implementation 类名 @end
对象方法的定义:
-(返回值类型) 方法名;
-(返回值类型) xxx:(参数类型) 形参名;
分区 -(返回值类型) xxx:(参数类型) 形参名; 对于有参数的方法来说,方法名是:"xxx:"
-(返回值类型) xxx:(参数类型) 形参名 andXXX:(参数类型) 形参名; 方法名: xxx: andXXX:
[对象名 xxx:实参1 andXXX:实参2];
方法的调用
[对象名 方法名]; //调用无参方法 [对象名 方法名:实参];
/*
类名:苹果手机(iPhone)
属性:颜色(_color ), 大小(_size), _cpu
行为:查看本机信息(aboutMyPhone),打电话(call), 发短信(sendMessage)
实现该类,并:
1)查看本机信息
2)打电话给10086
3)给10086发短信问联通的客服电话是多少
*/
#import <Foundation/Foundation.h>
//iPhone 类的声明
typedef enum color{kColorWhite,kColorBlack,kColorTHJ} iColor;
@interface iPhone:NSObject //@interface 类名 父类名
{
//类的属性(实例变量、成员变量)
@public
//手机的颜色
iColor _color;
//手机的尺寸
float _size;
//手机的CPU
NSString *_cpu;
}
//类的行为(方法)的声明
//查看手机的信息 实质:把手机的实例变量值打印出来
-(void)aboutMyPhone;
//打电话,需要一个参数,参数就是电话号码(字符串)
-(void)callPhone:(NSString *) telNum;
//发短信,给指定号码 发送 短信,短信的内容可以指定
-(void)sendMessage:(NSString *)telNum andContent:(NSString *) content;
-(void)sendMessage:(NSString *)telNum :(NSString *) content :(int) age;
//
@end
//iPhone 类的实现
@implementation iPhone //@implementation 类名
//类的行为(方法)的声明
//查看手机的信息 实质:把手机的实例变量值打印出来
-(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;
}
|