06-05、self关键字的使用

2017-09-19  本文已影响0人  山中石头

只用关注self在哪一个方法中 , 如果在类方法那么就代表当前类, 如果在对象方法那么就代表"当前调用该方法的对象"

注意:

self会自动区分类方法和对象方法, 如果在类方法中使用self调用对象方法, 那么会直接报错
不能在对象方法或者类方法中利用self调用当前self所在的方法

使用场景:
可以用于在对象方法之间进行相互调用
可以用于在类方法之间进行相互调用

可以用于区分成员变量和局部变量同名的情况
- (void)setCpu:(int)cpu
{
self->cpu = cpu;
}

Iphone.m
#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
Iphone.m
#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
上一篇 下一篇

猜你喜欢

热点阅读