嗯,这有点棘手,没用。它是关于 Objective C 实例内存的
你的代码可以转换成这个
NSString * asdfasdfasdfsdf = @"xxxxxxx4";
Class cls = [Soka class];
void * obj = &cls;
id ocObj = (__bridge id)obj;
NSLog(@"%@",[ocObj name]);
让我们一一说清楚
-
cls 是一个 Soka Class 对象
Class cls = [Soka class];
-
obj是指向Soka Class对象的指针
void * obj = &cls;
-
这会将 obj 转换为 Object C 对象
id ocObj = (__bridge id)obj;
当调用这个[ocObj name]时,Objective C会在ocObj对象附近找到内存。它在堆栈中是@"xxxxxxx4"。
另外,我对此进行测试以确保我是对的
@interface Soka : NSObject
@property (nonatomic, copy) NSString * name;
@property (nonatomic,copy) NSString * address;
-(void)speak;
@end
@implementation Soka
-(void)speak{
NSLog(@"my name is: %@", self.name);
}
@end
int main(int argc, char * argv[]) {
@autoreleasepool {
NSString * asdfasdfasdfsdf = @"xxxxxxx4";
NSString * address = @"address";
Class cls = [Soka class];
void * obj = &cls;
id ocObj = (__bridge id)obj;
NSLog(@"%@",[ocObj name]);
NSLog(@"%@",[ocObj address]);
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
这将记录
2015-07-01 23:26:56.857 OCTest[10910:347815] address
2015-07-01 23:26:56.859 OCTest[10910:347815] xxxxxxx4
更新:
+class函数将返回一个类的类对象,类型为Class。
那么,Class 类型是什么,它与目标 c 运行时有关
typedef struct objc_class *Class;
这是objc_class的定义
struct objc_class {
Class isa OBJC_ISA_AVAILABILITY;
#if !__OBJC2__
Class super_class OBJC2_UNAVAILABLE;
const char *name OBJC2_UNAVAILABLE;
long version OBJC2_UNAVAILABLE;
long info OBJC2_UNAVAILABLE;
long instance_size OBJC2_UNAVAILABLE;
struct objc_ivar_list *ivars OBJC2_UNAVAILABLE;
struct objc_method_list **methodLists OBJC2_UNAVAILABLE;
struct objc_cache *cache OBJC2_UNAVAILABLE;
struct objc_protocol_list *protocols OBJC2_UNAVAILABLE;
#endif
} OBJC2_UNAVAILABLE;
当你创建一个 Objective C 对象时,它会自动管理内存。在您的代码中,使 Objective C 对象像内存一样只是一个技巧。