Objecitve-C的重要特性是Runtime(運行時),在Interacting with the Runtime(互動運行)中,運行時函數部分,蘋果給出了/usr/lib/libobjc.A.dylib庫,這個共用庫提供支援動態屬性的objective
- c語言,通過其介面,可以用於開發將其他語言運行於Objective-C上的中介層(橋接層),庫裡的函數定義為純C語言。
例如:class_getName
class_getNameReturns the name of a class.const char * class_getName(Class cls)ParametersclsA class object.Return ValueThe name of the class, or the empty string if cls is Nil.Declared Inruntime.h
這裡我們要用庫裡的函數,幹個“壞事”,查看蘋果SDK的私人方法。
第一步:匯入標頭檔
#import <objc/runtime.h>
第二步:添加下列代碼
NSString *className = NSStringFromClass([UIView class]); const char *cClassName = [className UTF8String]; id theClass = objc_getClass(cClassName); unsigned int outCount; Method *m = class_copyMethodList(theClass,&outCount); NSLog(@"%d",outCount); for (int i = 0; i<outCount; i++) { SEL a = method_getName(*(m+i)); NSString *sn = NSStringFromSelector(a); NSLog(@"%@",sn); }
第三步:想看什麼類 就把UIView換成你想要的
當然,如果只是查看私人API,會有更簡單的方法,可以使用工具class-dump,也可以通過此連結,https://github.com/kennytm/iphone-private-frameworks/tree/master/UIKit/
查看。
特別注意的是,如果是需要上架的APP,切勿使用私人API,會通不過APP Store的審核。
iOS開發群,大家做技術交流和資源,群號:241048287