亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

IOS 中runtime使用方法整理

2020-07-26 02:52:06
字體:
來源:轉載
供稿:網友

IOS 中runtime使用方法整理

做iOS的朋友都知道或聽說runtime,這個東西很像java的反射機制,但功能遠勝于java的反射。通過runtime我們可以動態的向一個類中添加屬性、成員變量、方法,以及對其進行讀寫訪問。

新建兩個類ClassOne和ClassTwo

#import <Foundation/Foundation.h>@interface ClassOne : NSObject{  NSString *_publicVar1;  NSString *_publicVar2;}@property(nonatomic,copy) NSString *publicProperty1;@property(nonatomic,copy) NSString *publicProperty2;- (void) testClassOneWithArg1:(NSString *)arg1;@end#import "ClassOne.h"@interface ClassOne()@property(nonatomic,copy) NSString *privateProperty1;@property(nonatomic,copy) NSString *privateProperty2;@end@implementation ClassOne{    NSString *_privateVar1;    NSString *_privateVar2;}- (void)testClassOneWithArg1:(NSString *)arg1{  NSLog(@"this is CalssOne, arg1:%@",arg1);}- (void)testClassOneWithArg1:(NSString *)arg1 arg2:arg2{  NSLog(@"this is CalssOne, arg1:%@ arg2:%@",arg1,arg2);}@end
#import <Foundation/Foundation.h>@interface ClassTwo : NSObject- (void) testClassTwoWithArg1:(NSString *)arg1 arg2:(NSString *)arg2;@end#import "ClassTwo.h"@implementation ClassTwo- (void)testClassTwoWithArg1:(NSString *)arg1 arg2:(NSString *)arg2{  NSLog(@"this is ClassTwo arg1:%@,arg2:%@",arg1,arg2);}@end

1.拷貝對象

ClassOne *one = [ClassOne new];id onec1 = object_copy(one,sizeof(one));

2.給類添加方法

ClassOne *one = [ClassOne new];class_addMethod([ClassOne class], @selector(testClassOneWithArg1:arg2:arg3:), (IMP)testClassOne , "i@:@@@");[one testClassOneWithArg1:@"arg1" arg2:@"arg2" arg3:@"arg3"];//方法對應的C函數int testClassOne(id self,SEL _cmd, NSString *arg1,NSString *arg2,NSString *arg3){NSLog(@"this is a test function add to ClassOne as a methad with arg1:%@ arg2:%@ and arg3:%@",arg1,arg2,arg3);  return 10;}

3.添加屬性(方式一)

//屬性類型objc_property_attribute_t type = { "T", "@/"NSString/"" };//訪問類型objc_property_attribute_t ownership = { "C", "" };//對應成員變量名稱objc_property_attribute_t backingivar = { "V", "_testPropertyName" };objc_property_attribute_t attrs[] = { type, ownership, backingivar };class_addProperty([ClassOne class], "testPropertyName", attrs, 3);class_addMethod([ClassOne class], @selector(testPropertyName), (IMP)testPropertyNameGetter , "@:@@");class_addMethod([ClassOne class], @selector(setTestPropertyName:), (IMP)testPropertyNameSetter, "v:@@@");//屬性對應的Getter方法NSString* testPropertyNameGetter(id self,SEL _cmd){  Ivar ivar = class_getInstanceVariable([ClassOne class], "_testPropertyName");  return object_getIvar(self, ivar);}//屬性對應的Setter方法void testPropertyNameSetter(id self,SEL _cmd,NSString *testPropertyNameValue){  Ivar ivar = class_getInstanceVariable([ClassOne class], "_testPropertyName");  object_setIvar(self, ivar, testPropertyNameValue);}

4.添加屬性(方式2)

ClassOne *one = [ClassOne new];objc_setAssociatedObject(one, "objTag", @"value", OBJC_ASSOCIATION_COPY);NSString *value = objc_getAssociatedObject(one, "objTag");NSLog(@"通過Associate設置:%@",value);

5.獲取類的名稱

ClassOne *one = [ClassOne new];const char *className = object_getClassName(one);NSLog(@"className:%@",[NSString stringWithUTF8String:className]);

6.獲取一個類的所有方法

UInt count;Method *methods = class_copyMethodList([ClassOne class], &count);for (int i = 0; i < count; i++) {  Method method = methods[i];  SEL sel = method_getName(method);  NSLog(@"方法名:%@",NSStringFromSelector(sel));}

7.獲取一個類的所有屬性

uint propertyCount;objc_property_t *ps = class_copyPropertyList([ClassOne class], &propertyCount);for (uint i = 0; i < propertyCount; i++) {  objc_property_t property = ps[i];  const char *propertyName = property_getName(property);  const char *propertyAttributes = property_getAttributes(property);  NSLog(@"propertyName:%@",[NSString stringWithUTF8String:propertyName]);  NSLog(@"propertyAttributes:%@",[NSString stringWithUTF8String:propertyAttributes]);}

8.獲取類的所有成員變量

uint ivarCount;Ivar *ivars = class_copyIvarList([ClassOne class], &ivarCount);for (uint i = 0; i < ivarCount; i++) {  Ivar ivar = ivars[i];  const char *ivarName = ivar_getName(ivar);  NSLog(@"ivarName:%@",[NSString stringWithUTF8String:ivarName]);}

9.獲得成員變量類型

uint ivarCount;Ivar *ivars = class_copyIvarList([ClassOne class], &ivarCount);for (uint i = 0; i < ivarCount; i++) {  Ivar ivar = ivars[i];  const char *ivarName = ivar_getName(ivar);  const char *type = ivar_getTypeEncoding(ivar);  NSLog(@"ivarName=%@,type=%@",[NSString stringWithUTF8String:ivarName],[NSString stringWithUTF8String:type]);}

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91系列在线观看| 最新91在线视频| 高清在线视频日韩欧美| 成人午夜小视频| 欧美性高潮床叫视频| 亚洲成人性视频| 久久6免费高清热精品| 高跟丝袜欧美一区| 欧美一级高清免费| 麻豆一区二区在线观看| 久久久av网站| 欧美日韩中文字幕在线| 日韩一区二区在线视频| 欧美激情视频一区二区| 久久精品国产一区二区电影| 成人xxxx视频| 欧美成人精品一区二区三区| 久久五月天色综合| 日本高清视频精品| 成人激情黄色网| 国产精品久久久久久婷婷天堂| 国产精品稀缺呦系列在线| 2020欧美日韩在线视频| 九九久久国产精品| 国产精品丝袜久久久久久不卡| 国产精品91久久| 欧美日韩成人免费| 91网在线免费观看| 日韩精品在线看| 日韩在线免费高清视频| 精品久久久久久亚洲精品| 国产成人欧美在线观看| 国产欧美日韩精品专区| 欧美日韩国产中文字幕| 亚洲人成在线一二| 日韩在线视频免费观看高清中文| 亚洲一区二区三区视频播放| 亚洲自拍偷拍一区| 日韩av在线资源| 欧美成人免费全部观看天天性色| 日韩精品在线观看一区二区| 国产精品欧美久久久| 国产精品视频男人的天堂| 91午夜在线播放| 国产精品观看在线亚洲人成网| 97精品国产aⅴ7777| 一本久久综合亚洲鲁鲁| 精品呦交小u女在线| 2020久久国产精品| 日本免费在线精品| 欧美高清在线播放| 欧美激情精品久久久久| 久久久免费高清电视剧观看| 中文欧美在线视频| 欧美日本黄视频| 国产自产女人91一区在线观看| 成人av在线天堂| 欧美wwwwww| 亚洲一区二区三区久久| 欧美麻豆久久久久久中文| 欧美亚洲激情在线| 国产日韩中文字幕在线| 亚洲精品动漫久久久久| 91视频国产高清| 4438全国成人免费| 国产91露脸中文字幕在线| 亚洲福利在线观看| 欧美福利视频网站| 久久亚洲精品中文字幕冲田杏梨| 亚洲精品之草原avav久久| 亚洲国产精品成人精品| 久久激情视频久久| 国产精品久久99久久| 国产精品网站视频| 国模gogo一区二区大胆私拍| 欧美激情免费在线| 亚洲a成v人在线观看| 亚洲精品在线91| 日本19禁啪啪免费观看www| 中文字幕亚洲无线码a| 精品国产一区二区三区四区在线观看| 一区二区三区在线播放欧美| 亚洲国产精品中文| 久久99视频免费| 久久夜精品va视频免费观看| 精品久久久久久中文字幕一区奶水| 黑人巨大精品欧美一区二区一视频| 亚洲最新av在线| 伦理中文字幕亚洲| 清纯唯美亚洲激情| 欧美劲爆第一页| 欧美电影在线观看完整版| 97视频色精品| 亚洲精品97久久| 亚洲性69xxxbbb| 日韩中文在线不卡| 国产精品嫩草影院久久久| 国模精品视频一区二区| 91久久在线视频| 成人日韩av在线| 国产日韩精品电影| 中日韩美女免费视频网站在线观看| 欧美亚洲一区在线| 日本成人黄色片| 国产视频在线观看一区二区| 久热精品在线视频| 午夜精品久久久久久99热| 亚洲欧洲激情在线| 亚洲精品98久久久久久中文字幕| 成人黄色在线免费| 国产精品劲爆视频| 欧美自拍视频在线| 日韩中文字幕视频| 一道本无吗dⅴd在线播放一区| 日韩激情第一页| 国产久一一精品| 欧美日韩成人黄色| 欧美性猛交xxxx久久久| 成人h视频在线观看播放| 亚洲成人久久久| 国产一区二区在线免费| 欧美福利视频网站| 国产精品久久久久久av下载红粉| 欧美视频一二三| 亚洲精品456在线播放狼人| 亚洲午夜国产成人av电影男同| 黄色成人av在线| 久久精品99国产精品酒店日本| 日日噜噜噜夜夜爽亚洲精品| 亚洲夜晚福利在线观看| 欧美大片免费观看在线观看网站推荐| 日韩欧美福利视频| 亚洲女人天堂成人av在线| 中文字幕亚洲欧美在线| 日韩精品免费综合视频在线播放| 亚洲一品av免费观看| 国产精品视频自在线| 亚洲成人激情小说| 久久精品视频中文字幕| 欧洲成人在线观看| 亚洲国产另类久久精品| 一道本无吗dⅴd在线播放一区| 日韩成人免费视频| 91亚洲国产成人精品性色| 揄拍成人国产精品视频| 91免费人成网站在线观看18| 91日本在线视频| 亚洲欧美国产va在线影院| 国产精品国产亚洲伊人久久| 不卡av电影在线观看| 欧美日韩一区二区免费在线观看| 欧美日韩中文字幕综合视频| 国产精品视频999| 97在线观看视频国产| 国产精品国产三级国产aⅴ浪潮| 亲子乱一区二区三区电影| 亚洲视频axxx| 成人国产精品一区二区| 国产成人激情视频| 欧美高清不卡在线| 日韩欧美一区二区三区| 久久综合色影院| 亚洲综合在线播放| 亚洲无亚洲人成网站77777|