runtime講解<一>

1.runtime是什麼?

runtime直譯就是運行時間,run(跑,運行) time(時間),網上你們都叫它運行時,它是一套比較底層的純C語言API,屬於一個C語言庫,包含了不少底層的C語言API,它是OC的幕後工做者,咱們平時寫的OC代碼,在運行過程時,都會轉爲runtime的C語言代碼面試

2.runtime在開發中有什麼用?

看到這有人要說啦,程序原本就在運行,跑着,有叼用?哦NO,我又不是猴子派來的逗逼。沒用我浪費唾沫,貌似今晚沒吃好飯,一會去你家吃啊,別看,誰看就說誰。仍是不要啦,接着看吧,不能由於我要去你家吃飯,你就錯過精彩的一段啊。電視劇開了,主題來了。有很多人都用過MJExtension,喂,它是什麼?別問,我又不是老師,本身谷歌去。查到了,json轉model的嗎,我會用,面試官來了,原理是什麼?舉頭望明月,低頭思原理,並不知道,pass.其實MJExtension實質就是應用runtime ,下面揭runtime的新娘遮蓋頭json

(1)新建個model類Studentatom

@interface Student : NSObjectspa

 

#pragma mark - 屬性code

//姓名對象

@property (nonatomic, copy) NSString *name;開發

//性別字符串

@property (nonatomic, copy) NSString *sex;get

//年齡string

@property (nonatomic, assign) NSInteger age;

//分數

@property (nonatomic, assign) float score;

#pragma mark - 方法//作完做業

- (void)finish:(NSString *)name;

//考試(學生時代的苦逼事,上班時代的嚮往事啊)

- (void)exam;

@end

如今我想知道有哪些屬性,看看runtime是怎麼幹的

//添加私有變量
@interface Student ()

//班級
@property (nonatomic, copy) NSString *class;

@end

//得到類的全部成員變量名
- (void)test1
{
	unsigned int count;
	//得到成員變量的結構體
	Ivar *ivars = class_copyIvarList([Student class], &count);
	for (int i = 0; i < count; i++) {
		Ivar ivar = ivars[i];
		//得到成員變量的名稱
		const char *name = ivar_getName(ivar);
		//由於runtime是基於c語言的,得到的是c字符串,轉成oc字符串
		NSString *key = [NSString stringWithUTF8String:name];
		
		NSLog(@"%zd--- %@", i, key);
		
	}
//這是幹嗎的,不給你說,哪能什麼都告訴你啊
free(ivars);
}

上面查看了全部成員變量,如今看看全部屬性名

//得到類的全部屬性名
- (void)test1
{
	unsigned int count;
	//得到成員變量的結構體
	objc_property_t *propertys = class_copyPropertyList([Student class], &count);
	for (int i = 0; i < count; i++) {
		objc_property_t property = propertys[i];
		//得到成員變量的名稱
		const char *name = property_getName(property);
		//由於runtime是基於c語言的,得到的是c字符串,轉成oc字符串
		NSString *key = [NSString stringWithUTF8String:name];
		
		NSLog(@"%zd--- %@", i, key);
		
	}
//此處必須釋放,我都ARC了,釋放什麼啊,ARC那是什麼,我表示不知道,它是釋放的是Foundation對象,也就是OC對象,可我如今用的是coreFoundation啊,和你ARC有啥關係,好吧,我被說服了,放就放吧,逼着難受
	free(propertys);
}

查看student的全部方法

- (void)test3
{
	unsigned int count;
	Method *methods = class_copyMethodList([Student class], &count);
	for (int i = 0; i < count; i++) {
		Method method = methods[i];
		//獲取方法
		SEL methodSEL = method_getName(method);
		//將方法轉化爲c字符串
		const char *name = sel_getName(methodSEL);
		//轉化爲oc字符串
		NSString *key = [NSString stringWithUTF8String:name];
		
		NSLog(@"%zd--- %@", i, key);
	}
	free(methods);
}

ofcourse,還能夠看看協議方法,此處略過

相關文章
相關標籤/搜索