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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cuiyewen 中级黑马   /  2015-8-5 21:06  /  505 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一. 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;
}

评分

参与人数 1黑马币 +4 收起 理由
何时归来看花开 + 4 赞一个!

查看全部评分

5 个回复

倒序浏览
来看看你

点评

别到处评分了,否则就要扣除分数了  发表于 2015-8-5 21:31
回复 使用道具 举报
很全面,不错哦
回复 使用道具 举报
留着以后用
回复 使用道具 举报
还在学c,留着以后用
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马