程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> ios-IOS中類別的3個作用 “創建對私有方法的前向引用”

ios-IOS中類別的3個作用 “創建對私有方法的前向引用”

編輯:編程綜合問答
IOS中類別的3個作用 “創建對私有方法的前向引用”

最近在看IOS的面試題,遇到一個題叫做“類別的作用”,其作用有3:
(1)可以將類的實現分散到多個不同文件或多個不同框架中,方便代碼管理。也可以對框架提供類的擴展(沒有源碼,不能修改)。

(2)創建對私有方法的前向引用:如果其他類中的方法未實現,在你訪問其他類的私有方法時編譯器報錯這時使用類別,在類別中聲明這些方法(不必提供方法實現),編譯器就不會再產生警告

(3)向對象添加非正式協議:創建一個NSObject的類別稱為 “創建一個非正式協議”,因為可以作為任何類的委托對象使用。
第1個和第3個好理解,但第2個怎麼理解,我感覺一頭霧水,
首先,第一句話 “如果其他類中的方法未實現”, 為什麼方法未實現,不實現聲明那個方法干什麼
其次,“訪問其他類的私有方法時編譯器報錯這時使用類別”, 聲明這些方法,等於是聲明了一個與該類同名的方法,先前的是private的,這樣做有什麼意義?
誰能幫我解釋一下?

最佳回答:


實踐才是檢驗真理的唯一標准,我來舉個栗子吧

首先,我創建一個person類,聲明一個公有方法getAge,和一個私有方法getName

/*********person.h***********/
#import <Foundation/Foundation.h>

@interface person : NSObject
+ (void)getAge;
@end

/*********person.m***********/
#import "person.h"
@interface person ()
+ (void)getName;
@end

@implementation person

+ (void)getAge {
    NSLog(@"age:18");
}

+ (void)getName {
    NSLog(@"name:XXX");
}
@end

然後正常情況下別的類想要直接調用getName是調用不了的,會報錯圖片說明

然後我又創建了一個Category,在.h裡聲明方法getName,.m什麼也沒寫

#import "person.h"

@interface person (TEXT)
+ (void)getName;
@end 

然後在要調用的類import這個Category,再去運行上圖的代碼,就不會報錯,而且getName的私有方法也執行了
還是不明白的話就自己去試試吧,沒有c幣好痛苦

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved