摘要:
什么是RunLoop runloop是运行循环,在程序运行过程中循环做一些事情 RunLoop应用范畴 定时器、PerformSelector、GCD 事件响应、手势识别、界面刷新、网络请求、自动释放池 获取RunLoop对象 iOS中有2套API来访问和使用RunLoop,分别是NSRunLoop 阅读全文
摘要:
在arm64架构之前,isa就是一个普通的指针,存储着Class、Meta-Class对象的地址 从arm64架构开始,对isa进行了优化,变成了一个共用体(union)结构,还使用位域来 存储更多信息,在apple源码objc中找到isa的结构源码大抵如下: # if __arm64__ # de 阅读全文
摘要:
对于LBPerson类,代码如下 @interface LBPerson : NSObject @property (nonatomic, copy) NSString *name; - (void)test; @end @implementation LBPerson - (void)test { 阅读全文
摘要:
写如下代码: BOOL flag1 = [[NSObject class] isKindOfClass:[NSObject class]]; BOOL flag2 = [[NSObject class] isMemberOfClass:[NSObject class]]; BOOL flag3 = 阅读全文
摘要:
对于下面的代码,打印的结果是啥 #import "LBStudent.h" @implementation LBStudent - (instancetype)init { self = [super init]; if (self) { NSLog(@"[self class] = %@", [s 阅读全文
摘要:
__block修饰符 __block可以用于解决block内部无法修改auto变量值的问题, __block不能修饰全局变量、静态变量 写下面的block代码: int main(int argc, const char * argv[]) { @autoreleasepool { __block 阅读全文
摘要:
block中对于变量的捕获分为三种: 值传递、指针传递和直接访问 值传递 block捕获的局部变量,用auto修饰的,auto一般省略 #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autor 阅读全文
摘要:
写如下的block声明代码: #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { void (^blockTest)(void) = ^{ NSLog(@"hah 阅读全文
摘要:
我在最新版的objc中找到initializeNonMetaClass,源码如下: void initializeNonMetaClass(Class cls) { ASSERT(!cls->isMetaClass()); Class supercls; bool reallyInitialize 阅读全文
摘要:
从objc苹果的源码中可以看到如下代码: load_images(const char *path __unused, const struct mach_header *mh) { if (!didInitialAttachCategories && didCallDyldNotifyRegist 阅读全文