返回
剖析类的属性、方法、实例变量、类方法的源码结构
IOS
2023-10-18 01:17:46
类的结构
Objective-C 中的类是通过 objc_class
结构体来表示的。它定义了类的名称、大小、父类、实例变量、方法、类方法等信息。我们可以通过 class_inspect
函数来查看类的结构体信息。
#include <objc/runtime.h>
void printClassStructure(Class cls) {
objc_class* class = (objc_class*)cls;
printf("Class name: %s\n", class->name);
printf("Class size: %lu\n", class->instance_size);
printf("Parent class: %s\n", class->superclass->name);
printf("Instance variables:\n");
for (uint32_t i = 0; i < class->ivars->count; i++) {
Ivar ivar = class->ivars->ivar_list[i];
printf(" - %s %s\n", ivar_getName(ivar), ivar_getTypeEncoding(ivar));
}
printf("Methods:\n");
for (uint32_t i = 0; i < class->methods->count; i++) {
Method method = class->methods->method_list[i];
printf(" - %s %s\n", method_getName(method), method_getTypeEncoding(method));
}
printf("Class methods:\n");
for (uint32_t i = 0; i < class->class_methods->count; i++) {
Method method = class->class_methods->method_list[i];
printf(" - %s %s\n", method_getName(method), method_getTypeEncoding(method));
}
}
属性
属性是类的公开接口,它允许外界访问和修改类的私有变量。属性的实现实际上是通过 getter 和 setter 方法来完成的。我们可以通过 @property
语法来声明属性,也可以通过 objc_property_t
结构体来操作属性。
@interface Person : NSObject
@property (nonatomic, strong) NSString *name;
@property (nonatomic, assign) NSInteger age;
@end
@implementation Person
- (NSString *)name {
return _name;
}
- (void)setName:(NSString *)name {
_name = name;
}
- (NSInteger)age {
return _age;
}
- (void)setAge:(NSInteger)age {
_age = age;
}
@end
方法
方法是类的行为,它定义了类可以执行的操作。方法可以通过 @interface
语法来声明,也可以通过 Method
结构体来操作方法。
@interface Person : NSObject
- (void)sayHello;
@end
@implementation Person
- (void)sayHello {
NSLog(@"Hello, world!");
}
@end
实例变量
实例变量是类的私有变量,它属于类的每个实例。实例变量可以通过 @interface
语法来声明,也可以通过 Ivar
结构体来操作实例变量。
@interface Person : NSObject
{
NSString *_name;
NSInteger _age;
}
@end
@implementation Person
@end
类方法
类方法是属于类的静态方法,它不依赖于类的实例。类方法可以通过 +
号来声明,也可以通过 Method
结构体来操作类方法。
@interface Person : NSObject
+ (void)sayHello;
@end
@implementation Person
+ (void)sayHello {
NSLog(@"Hello, world!");
}
@end
总结
通过对类的源码结构进行剖析,我们对类的属性、方法、实例变量和类方法有了更深入的了解。这些概念是 Objective-C 中类的基本组成部分,掌握它们对于理解 Objective-C 的类机制和编写高质量的代码至关重要。