pragma mark 項(xiàng)目1:self關(guān)鍵字基本概念(類方法使用場(chǎng)景)
pragma mark 概念
/**
如果self在 對(duì)象方法中, 那么self就是 代表 調(diào)用當(dāng)前對(duì)象方法 的 那個(gè)對(duì)象
如果self在 類方法中, 那么 self 就 代表 調(diào)用當(dāng)前類方法 的那個(gè)類
總結(jié):
我們只要關(guān)注 self 在那一個(gè)方法中,
如果在 類方法 那么就代表當(dāng)前 類,
如果在 對(duì)象方法 那么就 代表 "當(dāng)前 調(diào)用該方法的 對(duì)象"
*/
#pragma mark 代碼
#import <Foundation/Foundation.h>
#pragma mark 類
#import "Iphone.h"
#pragma mark main函數(shù)
int main(int argc, const char * argv[])
{
#warning self 不能離開(kāi)類, 離開(kāi)類之后沒(méi)有任何意義
[Iphone carameWithFlahLightStatus:FlahLightStatusOpen];
return 0;
}
Iphone.h // 手機(jī)類
#import <Foundation/Foundation.h>
// 是否打開(kāi)閃光燈
typedef enum
{
FlahLightStatusOpen,
kFlahLightStatusClose
}kFlahLightStatus;
@interface Iphone : NSObject
{
int _cpu;
}
/**
* 根據(jù)閃光燈的狀態(tài)拍照
*
* @param status 閃光燈的狀態(tài) (開(kāi)、關(guān))
*/
// 沒(méi)有使用到成員變量 不需要使用對(duì)象方法
// 使用類方法
+ (void)carameWithFlahLightStatus:(kFlahLightStatus)status;
/**
* 打開(kāi)閃關(guān)燈
*/
+ (void)openFlahLight;
+ (void)closeFlahLight;
@end
Iphone.m
#import "Iphone.h"
@implementation Iphone
// 沒(méi)有使用到成員變量 不需要使用對(duì)象方法
/**
類方法中 可以 直接調(diào)用 類方法
類方法中 不可以 直接調(diào)用 類方法
類方法中 不能訪問(wèn)成員變量
*/
+ (void)carameWithFlahLightStatus:(kFlahLightStatus)status
{
if (status == FlahLightStatusOpen)
{
// 使用類名 調(diào)用
// [Iphone openFlahLight];
// 其實(shí) 在類方法中 調(diào)用類方法 除了可以使用類名 調(diào)用以外, 還可以使用self來(lái)調(diào)用
// self == 類名
[self openFlahLight]; // 控制臺(tái)輸出的self就是 Iphone類
}
else
{
// 使用類名 調(diào)用
// [Iphone closeFlahLight];
[self closeFlahLight];
}
NSLog(@"拍照");
}
+ (void)openFlahLight
{
NSLog(@"打開(kāi)閃關(guān)燈");
}
+ (void)closeFlahLight
{
NSLog(@"關(guān)閉閃關(guān)燈");
}
@end
pragma mark 項(xiàng)目2:self 關(guān)鍵字2 (對(duì)象方法使用場(chǎng)景)
pragma mark 概念
#pragma mark 代碼
#import <Foundation/Foundation.h>
#pragma mark 類
#import "Iphone.h"
#pragma mark main函數(shù)
int main(int argc, const char * argv[])
{
Iphone *p =[Iphone new];
NSLog(@"p = %p",p);
[p carameWithFlahLightStatus:FlahLightStatusOpen];
return 0;
}
Iphone.h // 手機(jī)類
#import <Foundation/Foundation.h>
// 是否打開(kāi)閃光燈
typedef enum
{
FlahLightStatusOpen,
kFlahLightStatusClose
}kFlahLightStatus;
@interface Iphone : NSObject
{
int _cpu;
}
/**
* 根據(jù)閃光燈的狀態(tài)拍照
*
* @param status 閃光燈的狀態(tài) (開(kāi)、關(guān))
*/
// 沒(méi)有使用到成員變量 不需要使用對(duì)象方法
// 使用類方法
- (void)carameWithFlahLightStatus:(kFlahLightStatus)status;
/**
* 打開(kāi)閃關(guān)燈
*/
- (void)openFlahLight;
- (void)closeFlahLight;
@end
Iphone.m
#import "Iphone.h"
@implementation Iphone
/**
如果self在 對(duì)象方法中, 那么self就是 代表 調(diào)用當(dāng)前對(duì)象方法 的 那個(gè)對(duì)象
如果self在 類方法中, 那么 self 就 代表 調(diào)用當(dāng)前類方法 的那個(gè)類
總結(jié):
我們只要關(guān)注 self 在那一個(gè)方法中,
如果在 類方法 那么就代表當(dāng)前 類,
如果在 對(duì)象方法 那么就 代表 "當(dāng)前 調(diào)用該方法的 對(duì)象"
*/
- (void)carameWithFlahLightStatus:(kFlahLightStatus)status
{
if (status == FlahLightStatusOpen)
{
NSLog(@"self = %p",self);
// 其實(shí)self 不僅僅可以調(diào)用 我們的類方法, 還可以調(diào)用對(duì)象方法
// self == 對(duì)象 == p
[self openFlahLight]; // 控制臺(tái)輸出的self 是一個(gè)指針 就是 Iphone類的對(duì)象
}
else
{
[self closeFlahLight];
}
NSLog(@"拍照");
}
- (void)openFlahLight
{
NSLog(@"打開(kāi)閃關(guān)燈");
}
- (void)closeFlahLight
{
NSLog(@"關(guān)閉閃關(guān)燈");
}
@end
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。