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

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);
    }
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 = [ 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 ;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值