只用关注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