【iOS底层】14:类的加载原理(上)

前言:

从这篇文章开始我们来探索一下类是如何加载到内存中的~

一、_objc_init()分析

【iOS底层】14:类的加载原理(上)_第1张图片

  • environ_init():环境变量的初始化。

点进去看看,方法内部最后有些打印环境变量的地方,我们将这段代码挪到前边还未打印数据之前,并将判断条件去除掉。 

【iOS底层】14:类的加载原理(上)_第2张图片

 就是↓这样的

【iOS底层】14:类的加载原理(上)_第3张图片

那么来打个断点打印一下看看 

objc[12906]: OBJC_PRINT_IMAGES: log image and library names as they are loaded
objc[12906]: OBJC_PRINT_IMAGES is set
objc[12906]: OBJC_PRINT_IMAGE_TIMES: measure duration of image loading steps
objc[12906]: OBJC_PRINT_IMAGE_TIMES is set
objc[12906]: OBJC_PRINT_LOAD_METHODS: log calls to class and category +load methods
objc[12906]: OBJC_PRINT_LOAD_METHODS is set
objc[12906]: OBJC_PRINT_INITIALIZE_METHODS: log calls to class +initialize methods
objc[12906]: OBJC_PRINT_INITIALIZE_METHODS is set
objc[12906]: OBJC_PRINT_RESOLVED_METHODS: log methods created by +resolveClassMethod: and +resolveInstanceMethod:
objc[12906]: OBJC_PRINT_RESOLVED_METHODS is set
objc[12906]: OBJC_PRINT_CLASS_SETUP: log progress of class and category setup
objc[12906]: OBJC_PRINT_CLASS_SETUP is set
objc[12906]: OBJC_PRINT_PROTOCOL_SETUP: log progress of protocol setup
objc[12906]: OBJC_PRINT_PROTOCOL_SETUP is set
objc[12906]: OBJC_PRINT_IVAR_SETUP: log processing of non-fragile ivars
objc[12906]: OBJC_PRINT_IVAR_SETUP is set
objc[12906]: OBJC_PRINT_VTABLE_SETUP: log processing of class vtables
objc[12906]: OBJC_PRINT_VTABLE_SETUP is set
objc[12906]: OBJC_PRINT_VTABLE_IMAGES: print vtable images showing overridden methods
objc[12906]: OBJC_PRINT_VTABLE_IMAGES is set
objc[12906]: OBJC_PRINT_CACHE_SETUP: log processing of method caches
objc[12906]: OBJC_PRINT_CACHE_SETUP is set
objc[12906]: OBJC_PRINT_FUTURE_CLASSES: log use of future classes for toll-free bridging
objc[12906]: OBJC_PRINT_FUTURE_CLASSES is set
objc[12906]: OBJC_PRINT_PREOPTIMIZATION: log preoptimization courtesy of dyld shared cache
objc[12906]: OBJC_PRINT_PREOPTIMIZATION is set
objc[12906]: OBJC_PRINT_CXX_CTORS: log calls to C++ ctors and dtors for instance variables
objc[12906]: OBJC_PRINT_CXX_CTORS is set
objc[12906]: OBJC_PRINT_EXCEPTIONS: log exception handling
objc[12906]: OBJC_PRINT_EXCEPTIONS is set
objc[12906]: OBJC_PRINT_EXCEPTION_THROW: log backtrace of every objc_exception_throw()
objc[12906]: OBJC_PRINT_EXCEPTION_THROW is set
objc[12906]: OBJC_PRINT_ALT_HANDLERS: log processing of exception alt handlers
objc[12906]: OBJC_PRINT_ALT_HANDLERS is set
objc[12906]: OBJC_PRINT_REPLACED_METHODS: log methods replaced by category implementations
objc[12906]: OBJC_PRINT_REPLACED_METHODS is set
objc[12906]: OBJC_PRINT_DEPRECATION_WARNINGS: warn about calls to deprecated runtime functions
objc[12906]: OBJC_PRINT_DEPRECATION_WARNINGS is set
objc[12906]: OBJC_PRINT_POOL_HIGHWATER: log high-water marks for autorelease pools
objc[12906]: OBJC_PRINT_POOL_HIGHWATER is set
objc[12906]: OBJC_PRINT_CUSTOM_CORE: log classes with custom core methods
objc[12906]: OBJC_PRINT_CUSTOM_CORE is set
objc[12906]: OBJC_PRINT_CUSTOM_RR: log classes with custo

你可能感兴趣的:(iOS底层,类加载原理)