導航:首頁 > 方法技巧 > ios如何調用方法

ios如何調用方法

發布時間:2023-07-01 01:36:35

1. ios 怎麼調用分類裡面的方法

ios category類別的使用
Objective-C提供了一個非常靈活的類(Class)擴展機制-類別(Category)。類別用於對一個已經存在的類添加方法(Methods)。你只需要知道這個類的公開介面,不需要知道類的源代碼。需要注意的是,類別不能為已存在的類添加實例變數(Instance Variables)。

類別的基本語法如下:
@interface ClassName(CategoryName)
//method declarations
@end
@interface 類名(類別名)
類別方法申明
@end
注意幾點:
1.現有類的類名位於 @interface之後
2.括弧中是類別的名稱(只要名稱唯一,可以添加任意多的類別)
3.類別沒有實例變數部分
類別的語法與類的語法非常相似。類別的方法就是類的方法。類別的定義可以放在一個單獨的文件中("類別名.h"), 也可以放在一個已存在的類的定義文件中(.h文件)。類別的實現則可放在一個單獨的「類別名.m」文件中,或另一個類的實現文件中。這點也與類的定義相似。因為類別的方法就是類的方法,所以類別的方法可以自由引用類的實例變數(無論公有或私有)。

子類(subclassing)是進行類擴展的另一種常用方法。與子類相比,類別最主要的優點是:系統中已經存在的類可以不需修改就可使用類別的擴展功能。例如,假設系統中存在一個類A;另外一個類B中定義了一個類A類型的實例變數,並包含了類A的頭文件「#import <A.h>"。假設一段時間後,需要對類A擴展幾個新的方法。如果用子類,就需要創建一個子類A-1。如果類B想要使用類A的新方法,就要進行如下修改:1) 將包含的頭文件改為"#import<A-1.h>"; 2)將所有用到的類A對象改為類A-1的對象。可以想像,如何有很多類需要用到類A的新功能(比如類A是iOS中的類UIViewController),隨著系統的升級(iOS從1.0到5.0),你的程序需要不停地進行這種繁瑣地修改。如果使用類別,即使類A升級了,系統中其它的類可以不需任何修改,直接就可以調用類A的新方法。

類別的第二大優點是實現了功能的局部化封裝。類別定義可以放在一個已存在的類(類A)的定義文件中(.h)。這意味著這個類別只有在類A被引用的前提下才會被外部看到。如果另一個類(類B)不需要用到類A的功能(沒有包含類A的.h文件),也就不會看到依附類A存在的類別。iOS SDK中廣泛運用這種類別定義法來封裝功能。例如,在 UINavigationController.h中定義了專為UINavigationController擴展的UIViewController類別:

@interface UIViewController (UINavigationControllerItem)
@property(nonatomic,readonly,retain) UINavigationItem *navigationItem;
@property(nonatomic,readonly,retain) UINavigationController *navigationController;
......
@end
如果一個類不引用UINavigationController.h,也就不會看到navigationItem和navigationController這兩個性質申明(declared property)。

類別的另一個優點是輕巧(light-weight)。很多時候,對已存在的類所需的擴展僅僅是幾個新方法。這時,用類別避免了在系統中留下很多非常短小的「微」子類,使程序更加緊湊。

歸納:
1、實現類別
同實現類相似,實現方法即可
2、 類別的局限性
1.類別不能添加新的實例變數
2.命名沖突,如果類別中方法和類中已有方法同名,則類別具有更高優先順序
3 類別的作用
1.將類的實現分散到多個不同文件或多個不同框架中
2.創建私有方法的前向引用
3.向對象添加非正式協議
4 利用類別分散實現
利用類別可以將類的方法分散到多個源文件中
特別指出的是:類別可以訪問其繼承的類的實例變數
在使用一個方法時,對象的方法是在介面中聲明、父類中聲明、還是類別中聲明並不重要
類別不僅可以分散實現到不同源文件,也可跨框架
5、 使用類別創建前向引用
雖然可以實現未聲明的方法,但是編譯器會提出警告
通過類別可以提供聲明,而且,聲明的方法不必要一定在類別的實現中實現,也可以在類的實現中實現
6、 非正式協議和委託類別
委託(delegage)是一種對象,另一個類的對象會要求委託對象執行它的某些操作
委託對象接受其它對象對它的特定方法的調用
其實就是委託對象必須實現別的對象調用的方法,與介面類似
7、 ITunesFinder項目
8 、委託和類別
委託和類別有什麼關系?委託強調類別的另一種應用:被發送給委託對象的方法可以聲明為一個NSObject的類別
創建一個NSObject的類別稱為「創建一個非正式協議」
9、 響應選擇器
選擇器只是一個方法名稱,可以使用@selector()預編譯指令指定選擇器,其中方法名位於圓括弧中,但它以OC運行時使用的特殊方式編碼,以快速執行查詢
NSObject提供了一個respondsToSelector的方法,詢問對象以確定其是否實現某個特定消息
10、 選擇器的其他應用
選擇器可以被傳遞,可以作為方法參數,甚至可以作為實例變數存儲

2. ios怎樣調用類方法

類方法也叫工廠方法,一般用加號「+」修飾
不需要創建對象就直接可以使用,直接使用類名久可以調用,例如:[NSString stringWithFormat:@"%@",@"123"];

3. iOS分類中調用主類原實例、類方法

看到裡面有一個 struct objc_method_list ** methodLists ,這就是存儲該類所有方法的地方了。查找方法的時候並不是每次都去遍歷methodList的,而是先去cache中查,cache中存儲了最近常用的方法。

看一下objc_method_list這個結構體

它有一個指向存儲廢棄方法列表的指針struct objc_method_list *obsolete,還有方法的個數int method_count,還有一個用於存儲方法的數組struct objc_method method_list[1]。其中數組的長度是可變的。

看一下objc_method這個結構體,

SEL method_name表示方法名,char *method_types表示參數及返回值類型,IMP method_imp表示指向方法實現的指針。

導入:

協議方法的獲取

類屬性的獲取

實例方法的獲取

類方法的獲取

方法交換 method swizzled

4. ios中怎麼在外部調用私有方法

因為method2在編譯器處理到method1的時候還沒有被聲明,因此編譯器在method1里並不知道method2的存在。新的LLVM已經改進了這個問題
解決方案:
1. 更新你的開發環境到最新的Xcode。
2. 寫一個Class Extension,把方法聲明在Class Extension里。

5. ios類方法中怎麼調用實例方法

實例方法是建立實例才有的方法類方法是直接可以使用類引用,不需要實例化就可以使用的方法,一般在項目中類方法都是設置為工具類使用的

閱讀全文

與ios如何調用方法相關的資料

熱點內容
白脈軟膏使用方法 瀏覽:298
喉骨軟化有沒有什麼好的治療方法 瀏覽:633
貴州中元節新式寫包的正確方法 瀏覽:877
做沙包的步驟帶有說明方法 瀏覽:720
萬聖手機殼製作方法 瀏覽:500
常用的浸提方法包括超濾法 瀏覽:663
惠普筆記本開機密碼在哪裡設置方法 瀏覽:736
投籃瞄準方法和技巧 瀏覽:741
馬粟樂使用方法 瀏覽:314
食用油最簡單的方法 瀏覽:675
食用油哪些方法 瀏覽:120
健身地膠點訓練方法 瀏覽:747
透明手機解鎖方法 瀏覽:990
2021年智慧樹教育科學研究方法試題答案 瀏覽:708
測量鋪貼瓷磚平整度的正確方法 瀏覽:363
如何確定齒輪的製造方法 瀏覽:612
公路涵洞測量方法 瀏覽:639
對數方程最簡單的方法 瀏覽:87
導泄作用的研究方法 瀏覽:95
生態建設的方法有哪些 瀏覽:573