動態新增方法:動態新增就運用到懶載入
開發場景:如果乙個類方法很多,載入類到記憶體的時候也比較耗費資源,需要給每個方法生成乙個對映表(這個詞我也不懂),可以使用動態給某個類新增方法。
person *p = [[person alloc]init];
//perform
selector:即為動態新增方法
[p performselector:
@selector(eat) withobject:
nil];
// 會報警告,執行後會報錯,報的錯誤是因為你沒有在person類裡面實現eat方法
如果你想自己動態新增方法首先你要在類中實現**如下:
#首先介紹相關的方法,後面再整合
/**處理例項方法
動態新增方法,首先實現這個resolveinstancemethod方法
resolveinstancemethod呼叫的情況:當呼叫了乙個沒有實現的方法,就會呼叫resolveinstancemethod這個方法
:沒有實現的方法
*/+ (bool)resolveinstancemethod:(sel)sel{}
// runtime 方法(匯入)
class_addmethod(, , ,
char *types#>)
:表示給哪個類新增 -- self
:方法編號 即為 方法名 -- 未實現的方法
:方法的實現,函式入口,函式指標或函式名 --在本類的@implementation 類名 下面
// 定義乙個函式(函式名隨便寫,imp要與之一致)
void tangtang_eat()
char *types#> :方法的型別 ---檢視xcode help document文件
xcode --> help --> document -->搜尋runtime --> 方法class_addmethod --> 檢視
char *types#>用法(也有整個動態新增方法的描述)
#根據蘋果系統的東西來
#import
"person.h"
#import
@implementation person
/** 預設乙個方法都有兩個引數,self,_cmd,為隱式引數,不顯示
self :方法的呼叫者
_cmd :呼叫方法的編號,即方法名
*///1. 定義乙個函式(函式名隨便寫)
// 無返回值,引數(id,sel)
void tangtang_eat(id self, sel _cmd)
/** 2.處理為實現的例項方法
動態新增方法,首先實現這個resolveinstancemethod方法
resolveinstancemethod呼叫的情況:當呼叫了乙個沒有實現的方法,就會呼叫resolveinstancemethod這個方法
:沒有實現的方法
*/+ (bool)resolveinstancemethod:(sel)sel
return [super resolveinstancemethod:sel];
}@end
#在viewcontroller中
#如果你要實現帶有引數的(自己找兩者的不同)
#person.m檔案中
// c語言中所有物件型別用 id
void tangtang_eat(id
self, sel _cmd, id prame1)
+ (bool)resolveinstancemethod:(sel)sel
return [super resolveinstancemethod:sel];
}#viewcontrollers中
Runtime(動態新增方法)
a問 有沒有使用過performselector,什麼時候使用?動態新增方法的時候使用過?怎麼動態新增方法?用runtime?為什麼要動態新增方法?b runtime 動態新增方法 oc都是懶載入機制,只要乙個方法實現了,就會馬上新增到方法列表中.qq,微博,直播等等應用,都有會員機制 任何方法預設...
Runtime 動態建立類新增屬性和方法
void createclass myclasstest是已經實現的函式,v 這種寫法見引數型別連線 class addmethod myclass,selector myclasstest imp myclasstest,v 註冊這個類到runtime系統中就可以使用他了 objc registe...
RunTime執行時之動態新增方法
import viewcontroller.h import person.h 複製 1 runtime 動態新增方法 oc都是懶載入機制,只要乙個方法實現了,就會馬上新增到方法列表中.qq,微博,直播等等應用,都有會員機制 performselector 去執行某個方法。performselect...