pragma mark self注意點和應用場景
pragma mark 概念
/**
如果self在 對象方法中, 那么self就是 代表 調用當前對象方法 的 那個對象
如果self在 類方法中, 那么 self 就 代表 調用當前類方法 的那個類
總結:
我們只要關注 self 在那一個方法中,
如果在 類方法 那么就代表當前 類,
如果在 對象方法 那么就 代表 "當前 調用該方法的 對象"
注意:
> self會自定區分 類方法 和 對象方法, 如果在類方法中 使用self調用對象方法, 那么會直接報錯
> 不能在 對象方法 或者 類方法中利用 self 調用當前的self 所在的方法(查看#warning 死循環)
#warning self的使用場景
可以用于 在對象方法之間 進行相互調用
可以用于 在類方法之間 進行相互調用
可以用于區分 成員變量 和 局部變量
*/
pragma mark 代碼
#import <Foundation/Foundation.h>
#pragma mark 類
#import "Iphone.h"
#pragma mark main函數
int main(int argc, const char * argv[])
{
[Iphone carameWithFlahLightStatus:FlahLightStatusOpen];
// Iphone *p = [Iphone new];
// NSLog(@"外面的p = %p",p);
// [p carameWithFlahLightStatus:FlahLightStatusOpen];
return 0;
}
Iphone.h // 手機類
#import <Foundation/Foundation.h>
// 是否打開閃光燈
typedef enum
{
FlahLightStatusOpen,
kFlahLightStatusClose
}kFlahLightStatus;
@interface Iphone : NSObject
{
// int _cpu;
int cpu; // 可以利用self 來區分局部變量和全局變量
}
#pragma mark set get
- (void)setCpu:(int)cpu;
- (int)cpu;
#pragma mark 方法
/**
* 根據閃光燈的狀態拍照
*
* @param status 閃光燈的狀態 (開、關)
*/
// 沒有使用到成員變量 不需要使用對象方法
// 使用類方法
+ (void)carameWithFlahLightStatus:(kFlahLightStatus)status;
/**
* 打開閃關燈
*/
+ (void)openFlahLight;
+ (void)closeFlahLight;
@end
Iphone.m
#import "Iphone.h"
@implementation Iphone
/**
如果self在 對象方法中, 那么self就是 代表 調用當前對象方法 的 那個對象
如果self在 類方法中, 那么 self 就 代表 調用當前類方法 的那個類
總結:
我們只要關注 self 在那一個方法中,
如果在 類方法 那么就代表當前 類,
如果在 對象方法 那么就 代表 "當前 調用該方法的 對象"
注意:
> self會自定區分 類方法 和 對象方法, 如果在類方法中 使用self調用對象方法, 那么會直接報錯
> 不能在 對象方法 或者 類方法中利用 self 調用當前的self 所在的方法(查看#warning 死循環)
#warning self的使用場景
可以用于 在對象方法之間 進行相互調用
可以用于 在類方法之間 進行相互調用
可以用于區分 成員變量 和 局部變量
*/
- (void)setCpu:(int)cpu
{
/*
self->cpu 是 全局變量 在外面.h中{} 定義的變量
cpu 是局部變量 通過外界 調用setCpu:(int)cpu 方法 傳遞一個cpu進來的變量
*/
self->cpu = cpu;
}
- (int)cpu
{
return self->cpu;
}
#pragma mark 方法
+ (void)carameWithFlahLightStatus:(kFlahLightStatus)status
{
if (status == FlahLightStatusOpen)
{
[self openFlahLight]; // self 代表外面的 p
}
else
{
[self closeFlahLight];
}
NSLog(@"拍照");
}
+ (void)openFlahLight
{
NSLog(@"打開閃關燈");
NSLog(@"里面的self = %p",self);
#warning 死循環
[self openFlahLight]; // self 代表外面的 p
}
+ (void)closeFlahLight
{
NSLog(@"關閉閃關燈");
}
@end
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。