zoukankan      html  css  js  c++  java
  • 类和对象 (Object-C语言)

    类和对象

     

     自动释放池

        @autoreleasepool

    C语言

       printf("Hello, World!%d ", a); 

     OC中的打印函数

      NSLog(@"Hello, World!%d", a); NSLog(@"你好!"); 

     NSLog比起printf增加的功能

            1.自动换行

            2.附加其他的信息(日期, 工程名)

            : NSLog比较消耗资源, 程序上传APPStore之前, 需要屏蔽掉NSLog

            

            C语言的字符串 "iPhone"

            OC中的字符串前要加@, @"iPhone" 

            乔布斯在NEXT公司时, 公司研发了一个NEXTStep的工具包, 后来乔布斯回到苹果, 也把这个工具包带回苹果, 集成到苹果的开发工具中, 所以iOS开发中很多都是以NS作为前缀

            

            C语言和OC(Objective-C, Objc)的区别

            1.OCC语言的超集, OC是在C的基础上做的扩展, C语言的语法OC中都支持

            2.OC扩充了面向对象的编程思想

            3.OC是一门运行时语言, 编译时只检查语法, 运行时才能决定(比如执行方法, 数据类型等)

            4.OC类库非常丰富

            

            面向对象编程OOP(Object Oriented Programming)

            面向对象编程的核心: , 对象

            面向对象编程的三大特性: 封装, 继承, 多态

            

            :具有相同特征和行为的事物的抽象

            对象: 万事万物皆对象

            

            类与对象的关系

            1.类是抽象的, 对象是具体的

            2.对象是类的实例

            3.类是对象的类型

            如何区分类和对象?

            看有没有具体到某个事物, 具体就是对象, 不具体就是类

             OC中如何创建一个类?

            1.cmd + n, 创建文件, CocoaTouch Class为模板创建一对文件(*.h *.m)

            2.*.h中写实例变量方法声明

            3.*.m中写方法实现  

            通过类来生成对象

            1.引入头文件

            2.开辟内存空间

            3.初始化

     OC中如何创建一个类?

            汽车类

            特征品牌价格轮子数量

            行为

     Car.h

    //@interface 类名 : 父类名
    @interface Car : NSObject{
        //实例变量 - 类的特征
    //    char brand[20];
    //    float price;
    //    int number;
        
        //实例变量能在外部访问, 需要加public
        @public
        
        //NSString: OC中字符串类型
        NSString *_brand;
        //CGFloat: OC中的浮点型, 在64位下是double, 在32位下是float
        CGFloat _price;
        //NSInteger: OC中的整型, 在64位下是long, 在32位下是int
        NSInteger _number;
        
        //注: 基本数据类型(char, short, int, long, float, double, BOOL), 不加*
        //实例变量命名以下划线开头
    }
    //方法 - 类的行为
    
    //C语言的函数声明
    //void run();
    
    //OC的方法声明
    //-/+: 决定方法由谁调用, -: 对象调用;  +: 类调用
    //(void): 返回值类型
    //run: 方法名
    - (void)run;
    - (void)stop;

    Car.m

    //@implementation - @end: 实现部分
    @implementation Car
    
    //方法实现
    - (void)run{
        //在类的内部, 通过实例变量名, 访问实例变量
    //    NSLog(@"%@汽车跑起来了!", _brand);
        NSLog(@"%ld个轮子的%@汽车, 竟然跑起来了!", _number, _brand);
    }
    
    - (void)stop{
        NSLog(@"%@根本停不下来!", _brand);
    }
    
    @end

    main.m

     OC中调用方法使用[]

     //类 *对象 =
    //        Car *car = [Car alloc];//使用alloc开辟内存空间
    //        [car init];//使用init初始化(把内存中的内存清空)
            Car *car = [[Car alloc] init];
            
            //为实例变量赋值
            car->_brand = @"奇瑞";
            car->_price = 2000.0;
            car->_number = 3;
            
            //打印实例变量的值
            NSLog(@"品牌: %@", car->_brand);
            NSLog(@"价格:%.2lf", car->_price);
            NSLog(@"轮子数量:%ld", car->_number);
            
            //调用方法
            //格式: [类/对象 方法名];
            [car run];
            [car stop];
            
            
            //定义一个汽车对象
            Car *car2 = [[Car alloc] init];
            car2->_brand = @"奥迪";
            car2->_price = 3000.0;
            car2->_number = 4;
            
            NSLog(@"品牌: %@ 价格: %.2lf 轮子数量: %ld", car2->_brand, car2->_price, car2->_number);
            
            [car2 run];
            [car2 stop];

            手机类phone

            特征: 颜色, 系统

            行为: 打电话, 发短信

     Phone.h

    @interface Person : NSObject {
        @public
        NSString *_name;
    }
    
    - (void)say:(NSString *)content;
    
    @end

    Phone.m

    @implementation Person
    
    - (void)say:(NSString *)content {
        NSLog(@"%@: %@", _name, content);
    }
    
    @end

    main.m

     Phone *phone = [[Phone alloc] init];
            phone->_color = @"土豪金";
            phone->_system = @"iOS";
            NSLog(@"颜色: %@ 系统: %@", phone->_color, phone->_system);
            [phone call];
            [phone sendMessage];
            [phone callToSomeone:@"Mr.Wang"];
            [phone sendMessageToSomeone:@"Mr.Zhang"];

            面向过程解决问题的思路

            1.分析解决问题的步骤

            2.把解决步骤形成函数

            3.依次调用函数

            

            面向对象解决问题的思路

            1.分析问题中出现的对象

            2.分析对象的特征和行为, 把具有相同特征的行为和对象归纳成类

            3.通过类创建对象

            4.通过对象去解决问题

     

    去逛夜市,我:这个怎么卖。摊主:380这个是真金的。我:10块。摊主:看清楚啊这个是真金。我:10块。摊主:好吧!看你那么执着卖你吧。我:我不买,就练练砍价。摊主:你别跑,你别跑,劳资砍死你

    *.h

    @interface People : NSObject {
        @public
        NSString *_name;
    }
    
    - (void)say:(NSString *)content;
    - (void)write:(NSString *)content;
    
    @end

    *.m

    @implementation People
    
    - (void)say:(NSString *)content {
        NSLog(@"%@说: %@", _name, content);
    }
    
    - (void)write:(NSString *)content {
        NSLog(@"%@写下: %@", _name, content);
    }
    
    @end

    main.m

    Person *me = [[Person alloc] init];
            me->_name = @"";
            Person *boss = [[Person alloc] init];
            boss->_name = @"摊主";
            
            [me say:@"这个怎么卖。"];
            [boss say:@"380这个是真金的。"];
            [me say:@"10块。"];
            [boss say:@"看清楚啊这个是真金。"];
            [me say:@"10块。"];
            [boss say:@"好吧!看你那么执着卖你吧。"];
            [me say:@"我不买,就练练砍价。"];
            [boss say:@"你别跑,你别跑,劳资砍死你!"];

        文件名和类名没有关系, 保持一致是为了方便管理

        一对文件中可以写多个类, 但建议一堆文件只写一个类, 同样也是为了方便管理

     

    The one who wants to wear a crown must bear the weight!
  • 相关阅读:
    策略模式c++【转】
    [转]C++设计模式:Builder模式
    c/c++ 笔试面试题
    堆排序
    冒泡,快速,和堆排序
    C++继承
    【转】林建:计算机专业学习浅谈
    (centos)linux下访问双系统windows7文件系统
    sprintf() in c
    System call in linux by C
  • 原文地址:https://www.cnblogs.com/OrangesChen/p/4844939.html
Copyright © 2011-2022 走看看