Objective-C@encode
生成 C 字符串来表示任何类型,包括原语和类,如下所示:
NSLog(@"%s", @encode(int)); // i
NSLog(@"%s", @encode(float)); // f
NSLog(@"%s", @encode(CGRect)); // {CGRect={CGPoint=ff}{CGSize=ff}}
NSLog(@"%s", @encode(NSString)); // {NSString=#}
NSLog(@"%s", @encode(UIView)); // {UIView=#@@@@fi@@I{?=b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b6b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b3b1b1b1b2b2b1}}
因此,我可以使用 对类(包含类名的类)进行有意义的编码@encode(ClassName)
,但它的格式也与泛型编码的格式相同struct
(如上例所示)。
现在,我的问题是,鉴于任何(当然是有效的)类型编码,是否有可能找出编码是否属于 Objective-C 类,如果是,则获取与Class
该编码对应的对象?
当然,我可能只是尝试从类型编码中解析出类名,并从中获取类 using NSClassFromString
,但这听起来不像是正确的方法,或者特别是性能效率高。这真的是实现这一目标的最佳方式吗?