obeject-c语言简介、基础语法

来源:互联网 发布:一拳超人King知乎 编辑:程序博客网 时间:2024/06/07 02:40
enhancedC:加强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);
    }
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
)类的实现(实现具体行为)
        @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 = [iPhonenew];
       
       
//设定手机的信息
        iPhone7Plus->
_color= kColorTHJ;
        iPhone7Plus->
_cpu= @"A20";
        iPhone7Plus->
_size= 7.9f;
       
       
//调用方法
        [iPhone7Plus
aboutMyPhone];
       
       
//10086打电话
        [iPhone7Plus
callPhone:@"10086"];
       
       
//10086发短信
        [iPhone7Plus
sendMessage:@"10086"andContent:@"你好,请问联通的电话多少?"];
    }
   
return 0;
}
0 0
原创粉丝点击