C++ typeid
    
            
摘要:【C++ typeid】 RTTI(Run-Time Type Identification,运行时类型识别),它使程序能够获取由基指针或引用所指向的对象的实际派生类型,即允许“用指向基类的指针或引用来操作对象”的程序能够获取到“这些指针或引用所指对象”的实际派生类型。在C++中,为了支持RTTI提
        
阅读全文
摘要:【何时必须使用member initialization list?】 1、初始化一个reference member时。 reference member必须在 initialization list中初始化。 2、初始化一个const member时。 const member必须在 initialization list中初始化。 3、当调用一个base class的constructor,而它拥有一组参数时。 必须在initialization list中调用父类的多参构造函数。 4、当调用一个member class的consturctor,而它拥有一组参数时。 必须在ini...
        
阅读全文
摘要:【什么时候会生成Copy Constructor?】 当无法应用 bitwise copy semantics时,就会生成copy constructor。以下4种情形,会生成copy constructor: 1、内含“带 copy constructor"的成员对象时。此时要在copy constructor中插入调用成员对象copy constructor的代码。 2、继承“带 copy constructor”的类时。此时要在copy constructor中插入调用成员对象copy constructor的代码。 3、声明了 virtual 函数时。此时要在copy con
        
阅读全文
摘要:【何时会生成default constructor?】 1、带有"Default Constructor"的Member Class Object。 对于Class Object成员,编译器默认会调用此成员的默认构造函数。那么在哪调呢?答案是本对象的默认构造函数。所以编译器会生成Default Constructor。 2、带有"Default Constructor"的Base Class。 对于继承的情况,编译器默认会调用此类父类的默认构造函数。同上,在本对象的默认构造函数里调,所以需要生成Default Constructor。 3、带有"
        
阅读全文
摘要:【详解objc_msgSend】 1、为了性能,objc_msgSend用汇编写成。存在于objc-msg-x86_64.s中。 2、在上图代码中可以看到,objc_msgSend被分为2个过程:1)在cache中寻找SEL。2)在MethodTable寻找SEL。 3、CacheLookup中,不断地拿SEL与cache中的缓存比较,比较失败,则跳转到LCacheMiss标签继续在MethodTable中搜索。 如果想手动查找cache,则需要调用_cache_getimp函数(汇编实现),此函数是个对外接口层,用于保存与准备环境。 _cache_getImp在头文件中obj...
        
阅读全文
摘要:【iOS inter-process communication】 1、剪贴板。 2、URL Scheme。 参考:x-callback-url
        
阅读全文
摘要:【Mach-O Objc信息导出】1、__DATA,__objc_selrefs 类型:SEL,指向 __TEXT,__objc_methname 中的数据长度:len(section)/len(SEL)注意:对于一个包含objc类信息的bundle,在bundle加载时,objc-runtime会把此bundle中的selrefs改写为指向__TEXT,__objc_methname中的数据。若该seg中数据不存在,存在在堆中新建一个字符串。简而言就是bundle中的selrefs不能指向自己的__TEXT seg。节省内存。2、__DATA,__objc_classlist &&a
        
阅读全文
摘要:【what is stubs?】 A stub is a small program routine that substitutes for a longer program, possibly to be loaded later or that is located remotely. For example, a program that uses Remote Procedure Calls (RPC) is compiled with stubs that substitute for the program that provides a requested procedure.
        
阅读全文
摘要:【x86 enter&leave 指令】 1、Enter的作用相当==push ebp和mov ebp,esp 2、Leave的作用相当==mov esp,ebp和pop ebp 参考:http://blog.csdn.net/zhangxinrun/article/details/5888425
        
阅读全文
摘要:【x86_64 Assembler Calling Convention】 1、x86_64 registers (r8-r15follow the same convention.) Theripregister is the instruction pointer register which points to the instruction being executed. 2、x86_64寄存器特性表 3、特性要点: 1)常用寄存器有16个,分为x86通用寄存器以及r8-r15寄存器。 2)通用寄存器中,函数执行前后必须保持原始的寄存器有3个:是rbx、rbp、rsp。r...
        
阅读全文
摘要:【Assembly之Operation Code】 The operation code field of an assembly language statement identifies the statement as a machine instruction, an assembler d...
        
阅读全文
摘要:【Assembly Language Statements】 1、general format of an assembly language statement: 2、A line may contain multiple statements separated by asemicolon ...
        
阅读全文
摘要:【Global Assert】 通常Assert函数被用于函数内部,这些assert会在运行时起检察状态作用。但是如何把Assert运用在编译期呢?objc4项目提供了一种方法。 即通过设置数组长度为-1的方法来达到编译期Assert作用。
        
阅读全文
摘要:【dlopen之mode参数详解】 1、mode参数可以设置2方面内容,导出符号范围与绑定时间。 2、导出符号范围,为以下2值。基本上来说,App每次加载dylib,都应该以RTLD_LOCAL来打开dylib。 3、绑定行为,为以下2值。基本上说来,App都应该以RTLD_LAZY来绑定,RTLD_NOW以在调度时有价值。
        
阅读全文
摘要:【dylib如何导出C++Class】 1、C++类成员函数必须为virtual。因为virtual函数在编译期会转换成偏移,偏移是可以跨平台的。而非virtual函数,则会直接通过符号去寻找,各个平台编译器对C++函数名符号的改写规则并不一致,可能导致找不到符号的情况。 2、必须提供工厂函数。因为
        
阅读全文
摘要:【objc之method&class attributes】 Objective-C now supports some gcc attributes for Objective-C methods. Syntactically, attributes for a method follow the method's declaration, and attributes for a method parameter sit between the parameter type and the parameter name. Supported attributes inclu
        
阅读全文
摘要:【mac之 dylib类型】 1、dependent library Adependent library, from the client’s point of view, is a dynamic library the client is linked with. Dependent libraries are loaded into the same process the client is being loaded into as part of its load process. For example, when an app is launched, its depende.
        
阅读全文
摘要:【linux之setsid】 1、函数原型 2、说明:当进程是会话组长时setsid()调用失败。setsid()调用成功后,进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离。由于会话过程对控制终端的独占性,进程同时与控制终端脱离。 3、使用: 如果parent和child运行在同一个session里,而且parent是session头。所以作为session头的parent如果exit结束执行的话,那么会话session组中的所有进程将都被杀死。执行setsid()之后,parent将重新获得一个新的会话session组id,child将仍持有原有的会话sessio...
        
阅读全文
摘要:【C内联汇编】 主要为了搞明白__asm__()中的:号是个啥意思,链接文档中写的很详细。 参考:http://learn.akae.cn/media/ch19s05.html
        
阅读全文
摘要:【objc runtime之association】 1、objc runtime association函数有3个,功能是给某个instance添加额外的key-value。 2、在objc runtime的实现中,采用monostate模式实现了一具全局association表,用于记录每一个对象所对应的key-value表。 3、AssociationManager中存留着disguise(obj_ptr) -> AssociationHashMap,此map记录着此obj_ptr所有的key->value。参考: 4、在3中可以看到,给某Class的instance添加as
        
阅读全文