草庐IT

老生常谈的iOS- weak原理,你真的懂得还是为了应付面试

前言weak对于iOS开发来说只要解决一些对象相互引用的时候,避免出现强强引用,对象不能被释放,出现内存泄露的问题。weak关键字的作用域弱引用,所引用对象的计数器不会加一,并在引用对象被释放的时候自动被设置为nil。weak底层原理1.weak编译解析首先需要看一下weak编译之后具体出现什么样的变化,通过Clang的方法把weak编译成C++编译之后的weak,通过objc_ownership(weak)实现weak方法,objc_ownership字面意思是:获得对象的所有权,是对对象weak的初始化的一个操作。在使用clang编译过程中会报错误,使用下方的方法编码编译出现errorcl

老生常谈的iOS- weak原理,你真的懂得还是为了应付面试

前言weak对于iOS开发来说只要解决一些对象相互引用的时候,避免出现强强引用,对象不能被释放,出现内存泄露的问题。weak关键字的作用域弱引用,所引用对象的计数器不会加一,并在引用对象被释放的时候自动被设置为nil。weak底层原理1.weak编译解析首先需要看一下weak编译之后具体出现什么样的变化,通过Clang的方法把weak编译成C++编译之后的weak,通过objc_ownership(weak)实现weak方法,objc_ownership字面意思是:获得对象的所有权,是对对象weak的初始化的一个操作。在使用clang编译过程中会报错误,使用下方的方法编码编译出现errorcl

apple 为什么要改 objc_msgSend 的类型申明

原文:https://mikeash.com/pyblog/objc_msgsends-new-prototype.html总结:objc_msgSend类型申明改变的原因:让错误在编译的时候发生,而不是等到运行时。为什么有运行时错误:ABI的错配,调用方的ABI(对参数的传递)和接收方ABI(对参数的处理)错配了为什么错配:我传的是float,你把我当double了,浮点转成双精度浮点,这可不是和short转int单单高位补几个0就可以了为什么float转double了:C语言经常搞这种骚操作,毕竟处理数据的时候,用更高的精度有好处。怎么阻止float转double:可以把函数中的参数类型申

apple 为什么要改 objc_msgSend 的类型申明

原文:https://mikeash.com/pyblog/objc_msgsends-new-prototype.html总结:objc_msgSend类型申明改变的原因:让错误在编译的时候发生,而不是等到运行时。为什么有运行时错误:ABI的错配,调用方的ABI(对参数的传递)和接收方ABI(对参数的处理)错配了为什么错配:我传的是float,你把我当double了,浮点转成双精度浮点,这可不是和short转int单单高位补几个0就可以了为什么float转double了:C语言经常搞这种骚操作,毕竟处理数据的时候,用更高的精度有好处。怎么阻止float转double:可以把函数中的参数类型申

关于ios:Objective-C中的OBJC_EXPORT关键字是什么意思?

WhatdoesOBJC_EXPORTkeywordinObjective-Cmean?当我使用这个方法class_getName()时,我发现它是这样声明的:1**OBJC_EXPORT**constchar*class_getName(Classcls)OBJC_EXPORT是什么意思?如果你CMD点击符号,你会看到它不是关键字。OBJC_EXPORT定义为:1#defineOBJC_EXPORT OBJC_EXTERNOBJC_VISIBLE而OBJC_EXTERN是extern"C"或extern,这取决于你是分别编译C还是C。而OBJC_VISIBLE在Windows上是__decl

关于ios:Objective-C中的OBJC_EXPORT关键字是什么意思?

WhatdoesOBJC_EXPORTkeywordinObjective-Cmean?当我使用这个方法class_getName()时,我发现它是这样声明的:1**OBJC_EXPORT**constchar*class_getName(Classcls)OBJC_EXPORT是什么意思?如果你CMD点击符号,你会看到它不是关键字。OBJC_EXPORT定义为:1#defineOBJC_EXPORT OBJC_EXTERNOBJC_VISIBLE而OBJC_EXTERN是extern"C"或extern,这取决于你是分别编译C还是C。而OBJC_VISIBLE在Windows上是__decl