{"id":1405,"date":"2018-11-23T09:03:50","date_gmt":"2018-11-23T01:03:50","guid":{"rendered":"http:\/\/www.yusian.com\/blog\/?p=1405"},"modified":"2018-11-27T17:21:08","modified_gmt":"2018-11-27T09:21:08","slug":"%e4%bd%bf%e7%94%a8runtime%e5%8a%a8%e6%80%81%e5%88%9b%e5%bb%ba%e4%b8%80%e4%b8%aa%e7%b1%bb","status":"publish","type":"post","link":"https:\/\/www.yusian.com\/blog\/project\/2018\/11\/23\/0903501405.html","title":{"rendered":"\u4f7f\u7528Runtime\u52a8\u6001\u521b\u5efa\u4e00\u4e2a\u7c7b"},"content":{"rendered":"<p><strong>\u5173\u952e\u4ee3\u7801\uff1a<\/strong><\/p>\n<pre lang=\"objc\" line=\"1\">#import \"ViewController.h\"\r\n#import <objc\/runtime.h>\r\n\r\n@interface ViewController ()\r\n@end\r\n\r\n@implementation ViewController\r\n- (void)viewDidLoad\r\n{\r\n    [super viewDidLoad];\r\n    \r\n    \/\/ \u52a8\u6001\u521b\u5efa\u4e00\u4e2a\u7c7b\r\n    Class newClass = objc_allocateClassPair(NSObject.class, \"SAObject\", 0);\r\n    \/\/ \u6dfb\u52a0\u7c7b\u6210\u5458\r\n    class_addIvar(newClass, \"name\", sizeof(NSString *), 1<<0, @encode(NSString *));\r\n    class_addIvar(newClass, \"age\", sizeof(int), 1<<0, @encode(int));\r\n    \/\/ \u6ce8\u518c\u7c7b\r\n    objc_registerClassPair(newClass);\r\n    \r\n    \/\/ \u904d\u5386\u7c7b\u6210\u5458\r\n    unsigned int outCount;\r\n    Ivar *ivars = class_copyIvarList(newClass, &#038;outCount);\r\n    for (int i = 0; i < outCount; i++) {\r\n        Ivar ivar = ivars[i];\r\n        NSLog(@\"%s %s\", ivar_getName(ivar), ivar_getTypeEncoding(ivar));\r\n    }\r\n    \r\n    \/\/ \u5185\u5b58\u91ca\u653e\r\n    free(ivars);\r\n    objc_disposeClassPair(newClass);\r\n}\r\n\r\n@end<\/pre>\n<p><strong>\u6253\u5370\u7ed3\u679c\uff1a<\/strong><br \/>\n2018-11-22 10:36:43.829729+0800 runtime[2399:357753] name @<br \/>\n2018-11-22 10:36:43.829862+0800 runtime[2399:357753] age i<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5173\u952e\u4ee3\u7801\uff1a #import &#8220;ViewController.h&#8221; #import @interface ViewController () @end @implementation ViewController &#8211; (void)viewDidLoad { [super viewDidLoad]; \/\/ \u52a8\u6001\u521b\u5efa\u4e00\u4e2a\u7c7b Class newClass = objc_allocateClassPair(NSObject.class, &#8220;SAObject&#8221;, 0); \/\/ \u6dfb\u52a0\u7c7b\u6210\u5458 class_addIvar(newClass, &#8220;name&#8221;, sizeof(NSString *), 1<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[179,180],"class_list":["post-1405","post","type-post","status-publish","format-standard","hentry","category-project","tag-runtime","tag-180"],"_links":{"self":[{"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/posts\/1405","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/comments?post=1405"}],"version-history":[{"count":0,"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/posts\/1405\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/media?parent=1405"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/categories?post=1405"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/tags?post=1405"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}