OC 3月25日学习总结

1.NSLog函数使用方法

/*
 NSLog和printf 区别

 1)NSLog会自动换行,printf不会自动换行
 2)NSLog能打印时间等项目信息,printf不能打印信息
 3)NSLog函数里的参数是NSString 对象,printf的参数是char类型的指针

 */

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {

//        printf("Hello,咸鸭蛋\n");
//        printf("Hello,咸鸭蛋\n");
//        NSLog(@"Hello,咸鸭蛋");
//        NSLog(@"Hello,咸鸭蛋");

        //C基本类型
        int a = 10;
        float f = 22.2f;
        double d = 33.33;
        char ch = 'B';
        char *str = "adds";
        char *strCN = "教主";

        //NSString %@格式输出,是OC中特有的字符串格式
        //@"" 作用:将C语言字符串转化为OC字符串
        NSString *str2 = @"小白";
        NSString *str3 = @"adgds";
        //1.OC可以向下兼容C,
        //NSLog可以以%s的格式打印ch类型的纯英文字符串
//        printf("%d, %.2f, %.2f, %c, %s\n", a, f, d, ch, str);
//        NSLog(@"%d, %.2f, %.2f, %c, %s",a, f, d, ch, str);

        //2.OC中NSLog函数不支持以%s的格式打印ch类型的纯中文字符串
//        printf("strCN = %s\n", strCN);
//        NSLog(@"strCN = %s", strCN);

        //3.printf函数不能以%@的格式输出,NSString类型的中文字符串
//        printf("str2 = %@\n", str2);
//        NSLog(@"str2 = %@",str2);

        //4.printf函数不能以%@的格式输出,NSString类型的字符串,无论是中文的还是英文的
        printf("str3 = %@\n", str3);
        NSLog(@"str3 = %@", str3);

    }

2.OC中注释及@符号的使用

/*
 command shift + k 清理缓存 
 command + b 编译
 */

#import <Foundation/Foundation.h>
//test
void test();

/*
 这是test函数这是test函数这是test函数这是test函数

 这是test函数这是test函数

 */

/**
 *  这是test函数吗?
 */
void test(){
    printf("这是test函数");
}

3.OC和C差异学习(一)

/*
 1.源文件的差异

 2.数据类型的差异

 3.关键字差异

 4.流程控制语句差异

 for(int i = 0, i < 10, i++){

 }

 增强for循环,作用快速遍历数组,字典

       类型  指针         数组/字典
 for (type *object in collection) {
    执行语句

 }

 in前类型和数组元素类型一致

 5.函数定义和声明

 定义C语言函数

 int max(int x ,int y);
 int max(int x ,int y){
    return x > y ? x : y;
 }


 OC中不叫函数,叫方法
 方法的声明
 - (int)max:(int)x andY:(int)y;
 方法的实现
 - (int)max:(int)x andY:(int)y{
    return x > y ? x : y;
 }

 - (void)test; //对象方法
 + (void)test; //类方法

 方法名和变量名书写规范:
 驼峰命名法

 NSString *xiaoHaiName;


 */

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *xiaoName;

        //OC数组,数组元素为字符串
        NSArray *arr = @[@"小啦", @"小草", @"小瓶盖"];


        for(NSString *str in arr){
            NSLog(@"str = %@", str);
        }

    }
    return 0;

4.OC和C差异学习(二)

/*
 1.OC新增数据类型
 Boolean 存储逻辑值的变量

 typedef unsigned char  Boolean;
 实质上是一个char 类型的别名

 ture 真 1 
 false 假 0


 BOOL 另一种存储逻辑值的变量
 typedef signed char BOOL;

 YES  1 
 NO   0

 2.异常捕捉方法
 @try @catch

 */

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //1.Boolean 类型的使用
//        Boolean flag1 = true;
//
//        flag1 = false;

//        NSLog(@"flag1 = %d", flag1);
//        if (flag1) {
//            NSLog(@"aaa");
//        }


        //2.BOOL的使用
//        BOOL flag2 = YES;
//        
//        flag2 = NO;
//        NSLog(@"flag2 = %d", flag2);
//        
//        if (flag2) {
//            NSLog(@"bbbb");
//        }

        //3.异常捕捉
        //问题: 1 / 0

        int a = 1;
//

        NSLog(@"qerzc");

        //异常捕捉方法
        @try {
            //可能会出错的代码
            int b = a / 0;
        }
        @catch (NSException *exception) {
            //出错后运行的代码
        }
        @finally {
            //不管出没出错都会运行的代码
        }

    }
    return 0;
}

5.类的声明和实现

/*
 Perosn类用结构体表示
 struct Person{
    char name[20];
    int age;
 };

 类:一类事物共同特征和行为的抽象

 大卡车 小轿车 挖掘机

 类名:Car
 共同特征(属性): 轮子 颜色 速度
 共同行为: 跑 停

 对象:类的具体个体

 解放大卡车(车类的对象)
 东风21D
 时风
 BYD
 BMW


 类的定义格式:分为 类的声明和类的实现

 1.类的声明
 @interface 类名 : 父类名(NSOjcect)
 {
  定义实例变量(属性)

 }

 声明类的行为
 @end

 2.类的实现
 @implementation 类名

 类行为的具体实现

 @end
 */

#import <Foundation/Foundation.h>

//Car类的声明
@interface Car : NSObject
{
    //实例变量书写规范:
    //数据类型 _实例变量名;
    int _speed;//速度
    NSString *_color; //颜色
    int _wheelCount; //轮子数
}

//声明类的行为

@end

//Car类的实现
@implementation Car

//类行为的具体实现

@end



int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
    }
    return 0;
}

6.创建一个对象并访问成员变量

/*
 1.定义一个结构体
 struct Student{
     char name[20];
     int age;
 };

 struct Student stu; //stu 结构体变量
 struct Student *pstu;//pstu = &stu;

 pstu->age = 10; //给结构体中成员变量赋值

 2.创建一个对象

重点:
  [Car new];创建对象做了3件事
 1.申请内存空间
 2.初始化类中的实例变量
 3.返回内存地址

 Car *c = [Car new];

 理解方式一:
 定义一个Car类型的指针,保存对象地址
 指针指向新申请的内存空间

 理解方法二:
 用Car 类实例化了一个实例对象,对象名为c

 */

#import <Foundation/Foundation.h>

//Car类的声明
@interface Car : NSObject
{
    //定义实例变量
    //实例变量书写规范:
    //数据类型 _实例变量名;
    @public
    int _speed;//速度
    NSString *_color; //颜色
    int _wheelCount; //轮子数
}

//声明类的行为

@end

//Car类的实现
@implementation Car

//类行为的具体实现

@end


int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //创建对象
        Car *c = [Car new];
        //给实例变量赋值,实质上还是指针访问实例变量
        c->_color = @"蓝色";
        c->_speed = 120;
        c->_wheelCount = 4;

        //查看车的信息
        NSLog(@"速度:%d, 颜色:%@, 轮子数:%d", c->_speed , c->_color, c->_wheelCount);



    }
    return 0;
}

7.无参方法声明实现及调用

/*
 C语言函数分类
 无参无返回值
 无参有返回值
 有参有返回值
 有参无返回值

 1.OC中无参方法的格式:
 无参无返回值方法声明
 - (返回值类型)方法名;

 无参无返回值方法实现
 - (返回值类型)方法名{

 }


 3.方法的调用
 [对象名 方法名];
 [类名 方法名];

 */

#import <Foundation/Foundation.h>

//Car类的声明
@interface Car : NSObject
{
    //定义实例变量
    //实例变量书写规范:
    //数据类型 _实例变量名;
    @public
    int _speed;//速度
    NSString *_color; //颜色
    int _wheelCount; //轮子数
}

//类的行为的声明
- (void)run; //跑

- (void)stop; //停

@end

//Car类的实现
@implementation Car

//类行为的具体实现
//类的内部使用实例变量直接调用,类的外部访问实例变量用指针调用
- (void)run{
    NSLog(@"BMW跑在乡间的小道上,速度为:%d", _speed);
}

- (void)stop{
    NSLog(@"咯吱,车停了");
}


@end


int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //创建对象
        Car *c = [Car new];

        //给对象实例变量赋值
        c->_speed = 120;
        c->_color = @"蓝色"; 
        c->_wheelCount = 4;

        //调用对象方法run
        [c run];
        //调用对象方法stop
        [c stop];

    }
    return 0;
}

8.有参方法声明实现及调用

/*
 1.C语言中的有参有返回值函数
 int sum(int a, int b);
 int sum(int a, int b){
    return a + b;
 }

 2.OC中有参有返回值方法格式
 1)带一个参数
 方法声明
 - (返回值类型)方法名:(参数类型)参数名;

 方法实现
 - (返回值类型)方法名:(参数类型)参数名{

 }

 2)带多个参数
    方法声明
 - (返回值类型)方法名1:(参数类型)参数名1 方法名2:(参数类型)参数名2;
 - (返回值类型)方法名1:(参数类型)参数名1 and方法名2:(参数类型)参数名2;
 - (返回值类型)方法名1:(参数类型)参数名1 :(参数类型)参数名2;
 注意:方法名的命名没有硬性要求,可以加and 或者什么都不写只有一个冒号,同一个方法的声明和实现一定要方法名一致


    方法实现
- (返回值类型)方法名1:(参数类型)参数名1 方法名2:(参数类型)参数名2{

 }

3. OC中sum方法声明
 - (int)sum:(int)a b:(int)b;
 - (int)sum:(int)a andB:(int)b;

 OC中方法的实现
 - (int)sum:(int)a b:(int)b{
 }

 - (int)sum:(int)a andB:(int)b{
 }

 4.OC方法注意:
 1)方法类型:- 开头是对象方法  ,+ 开头是类方法
 2)返回值类型:int 
 3)方法名:sum: b:
        sum: andB:
 4)参数类型:int int
 5)参数名:a  b

 */

#import <Foundation/Foundation.h>
//练习:
//实现一个计算器类:Calculator
//属性:_num1      _num2
//行为:sum

//类的声明
@interface Calculator : NSObject
{
    //定义实例变量
    @public
    int _num1;
    int _num2;
}
//无参方法声明
- (int)sum; //加法

//有参方法的声明
- (int)sum:(int)a andB:(int)b;


@end

//类的实现
@implementation Calculator
//无参方法的实现
- (int)sum{
    return _num1 + _num2;
}

//有参方法的实现
- (int)sum:(int)a andB:(int)b{
    return  a + b;
}

@end



int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //创建对象
        Calculator *cal = [Calculator new];

        //给对象实例变量赋值
//        cal->_num1 = 12;
//        cal->_num2 = 4;

        //调用无参方法
//       int sum = [cal sum];
        //调用有参方法
        int sum = [cal sum:12 andB:6];

        NSLog(@"sum = %d", sum);


    }
    return 0;
}

9.类的练习

/*
 类名:苹果手机(IPhone)
 属性:
    颜色(_color ), 大小(_size), _cpu
 行为:
    查看本机信息(aboutMyPhone),打电话(call), 发短信 (sendMessage)
 实现该类,并:
 1)查看本机信息
 2)打电话给10086
 3)给10086发短信问联通的客服电话是多少

 */

#import <Foundation/Foundation.h>
//颜色枚举
typedef enum{
    kColorBlack, kColorWhite, kColorGold
}Color;

//类的声明
@interface IPhone : NSObject
{
    //定义实例变量
    @public
    Color _color; //颜色
    float _size; //大小
    NSString *_cpu; //cpu
}


//1)查看本机信息
- (void)aboutMyPhone;

//2)打电话给10086
- (void)callPhone:(NSString *)telNum;

//3)给10086发短信问联通的客服电话是多少
- (void)sendMessage:(NSString *)telNum andContent:(NSString *)content;

@end

@implementation IPhone

//方法实现
//1)查看本机信息
- (void)aboutMyPhone{
    NSLog(@"颜色:%d, 大小:%.2f, cpu:%@", _color, _size, _cpu);
}

//2)打电话给10086
- (void)callPhone:(NSString *)telNum{
    NSLog(@"给 %@ 打电话", telNum);
}

//3)给10086发短信问联通的客服电话是多少
- (void)sendMessage:(NSString *)telNum andContent:(NSString *)content{
    NSLog(@"给 %@ 打电话,电话内容是:%@", telNum , content);
}

@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //创建对象
        IPhone *ip = [IPhone new];
        //给实例变量赋值
        ip->_color = kColorGold;
        ip->_size = 7.5f;
        ip->_cpu = @"A30";
        //调用方法
        //1.查看本机信息
        [ip aboutMyPhone];

        //2.打电话给10086
        [ip callPhone:@"10086"];

        //3.给10086发短信问联通的客服电话是多少
        [ip sendMessage:@"10086" andContent:@"你好,请问联通客服电话是多少?"];
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值