类和对象 (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!
原文地址:https://www.cnblogs.com/OrangesChen/p/4844939.html