zoukankan      html  css  js  c++  java
  • oc18--self1

    //
    //  Iphone.h
    //  day13
    
    #import <Foundation/Foundation.h>
    
    typedef enum
    {
        kFlahlightStatusOpen,
        kFlahlightStatusClose
    } FlahlightStatus;
    
    @interface Iphone : NSObject
    {
        int  _cpu;
    }
    + (void)carameWithFlahlightStatus:(FlahlightStatus)status;
    + (void)openFlahlight;
    + (void)closeFlahlight;
    @end
    //
    //  Iphone.m
    //  day13
    
    #import "Iphone.h"
    
    @implementation Iphone
    
    /*
     类方法中可以直接调用类方法
     类方法中不可以直接调用对象方法
     类方法中不能访问成员变量
    */
    
    + (void)carameWithFlahlightStatus:(FlahlightStatus)status
    {
        if (status == kFlahlightStatusOpen) {
    //        [Iphone openFlahlight];
            // 其实在类方法中调用类方法除了可以使用类名调用以外, 还可以使用self来调用
            [self openFlahlight];
        }else
        {
    //        [Iphone closeFlahlight];
            // self == Iphone
            [self closeFlahlight];
        }
        NSLog(@"拍照");
    }
    
    + (void)openFlahlight
    {
        NSLog(@"打开闪光灯");
    }
    
    + (void)closeFlahlight
    {
        NSLog(@"关闭闪光灯");
    }
    @end
    //
    //  main.m
    //  self关键字
    
    #import <Foundation/Foundation.h>
    #import "Iphone.h"
    
    int main(int argc, const char * argv[]) {
        // self不能离开类, 离开类之后没有任何意义
        [Iphone carameWithFlahlightStatus:kFlahlightStatusClose];
        return 0;
    }

    self2:

    //
    //  Iphone.h
    //  day13
    
    #import <Foundation/Foundation.h>
    
    typedef enum
    {
        kFlahlightStatusOpen,
        kFlahlightStatusClose
    } FlahlightStatus;
    
    @interface Iphone : NSObject
    {
        int  _cpu;
    }
    
    - (void)carameWithFlahlightStatus:(FlahlightStatus)status;
    - (void)openFlahlight;
    - (void)closeFlahlight;
    @end
    //
    //  Iphone.m
    //  day13
    
    #import "Iphone.h"
    
    @implementation Iphone
    
    /*
     如果self在对象方法中, 那么self就代表调用当前对象方法的那个对象
     如果self在类方法中, 那么self就代表调用当前类方法的那个类
     总结: 
     我们只用关注self在哪一个方法中 , 如果在类方法那么就代表当前类, 如果在对象方法那么就代表"当前调用该方法的对象"
     */
    - (void)carameWithFlahlightStatus:(FlahlightStatus)status
    {
        if (status == kFlahlightStatusOpen) {
            // 其实self不仅仅可以调用我们的类方法, 还可以调用对象方法
            // self == 对象 == p
            NSLog(@"self = %p", self);
            [self openFlahlight];
        }else
        {
            [self closeFlahlight];
        }
        NSLog(@"拍照");
    }
    
    - (void)openFlahlight
    {
        NSLog(@"打开闪光灯");
    }
    
    - (void)closeFlahlight
    {
        NSLog(@"关闭闪光灯");
    }
    
    @end
    //
    //  main.m
    //  self关键字2
    
    #import <Foundation/Foundation.h>
    #import "Iphone.h"
    
    int main(int argc, const char * argv[]) {
        
        Iphone *p = [Iphone new];
        NSLog(@"p = %p", p);
        [p carameWithFlahlightStatus:kFlahlightStatusOpen];
        
        return 0;
    }

    self3:

    //
    //  Iphone.h
    //  day13
    
    #import <Foundation/Foundation.h>
    
    typedef enum
    {
        kFlahlightStatusOpen,
        kFlahlightStatusClose
    } FlahlightStatus;
    
    @interface Iphone : NSObject
    {
        int  cpu;
    }
    
    - (void)setCpu:(int)cpu;
    + (void)carameWithFlahlightStatus:(FlahlightStatus)status;
    + (void)openFlahlight;
    + (void)closeFlahlight;
    @end
    //
    //  Iphone.m
    //  day13
    
    #import "Iphone.h"
    
    @implementation Iphone
    
    /*
     如果self在对象方法中, 那么self就代表调用当前对象方法的那个对象
     如果self在类方法中, 那么self就代表调用当前类方法的那个类
     总结: 
     我们只用关注self在哪一个方法中 , 如果在类方法那么就代表当前类, 如果在对象方法那么就代表"当前调用该方法的对象"
    
     注意:
     >self会自动区分类方法和对象方法, 如果在类方法中使用self调用对象方法, 那么会直接报错
     >不能在对象方法或者类方法中利用self调用当前self所在的方法
     
     使用场景:
     可以用于在对象方法之间进行相互调用
     可以用于在类方法之间进行相互调用
     
     可以用于区分成员变量和局部变量同名的情况
     */
    + (void)carameWithFlahlightStatus:(FlahlightStatus)status
    {
        if (status == kFlahlightStatusOpen) {
            NSLog(@"self = %p", self);
            [self openFlahlight]; // p
        }else
        {
            [self closeFlahlight];
        }
        NSLog(@"拍照");
    }
    
    + (void)openFlahlight
    {
        NSLog(@"打开闪光灯");
        NSLog(@"self = %p", self);
        // 死循环
        [self openFlahlight]; // p
    }
    
    + (void)closeFlahlight
    {
        NSLog(@"关闭闪光灯");
    }
    
    - (void)setCpu:(int)cpu
    {
        self->cpu = cpu;
    }
    @end
    //
    //  main.m
    //  self关键字的注意点
    
    #import <Foundation/Foundation.h>
    #import "Iphone.h"
    
    int main(int argc, const char * argv[]) {
        
        [Iphone carameWithFlahlightStatus:kFlahlightStatusOpen];
    //    Iphone *p = [Iphone new];
    //     NSLog(@"p = %p", p);
    //    [p carameWithFlahlightStatus:kFlahlightStatusOpen];
        return 0;
    }
  • 相关阅读:
    CF 461B Appleman and Tree
    POJ 1821 Fence
    NOIP 2012 开车旅行
    CF 494B Obsessive String
    BZOJ2337 XOR和路径
    CF 24D Broken robot
    POJ 1952 BUY LOW, BUY LOWER
    SPOJ NAPTIME Naptime
    POJ 3585
    CF 453B Little Pony and Harmony Chest
  • 原文地址:https://www.cnblogs.com/yaowen/p/7412848.html
Copyright © 2011-2022 走看看