对OS X或iOS编程过的朋友应该对Foundation库不陌生吧,这个就是在gnustep库里的,如果不装此库,你连NSObject都用不了,呼呼~先安装gnustep sudo apt-get...install gnustep 完成之后,我们再安装gnustep-devel sudo apt-get install gnustep-devel 这样整个需要安装的环境都安装好了...GNUstep/Makefiles/GNUstep.sh 这样,当前控制台的GNUStep的编译环境就建立好了。...= /usr/share/GNUstep/Makefiles include $(GNUSTEP_MAKEFILES)/common.make ADDITIONAL_FLAGS...这里要注意的是,对于其它Linux版本的系统,GNUStep的默认安装路径可能不是在/usr/share/之中,因此需要根据当前GNUStep/Makefiles的路径对GNUSTEP_MAKEFILES
1.GNUstep中的KVO实现 GNUstep是Objective-C中大部分实现的前身,虽然OC在GNUstep的基础上做了许多更新和优化,但是很多基本逻辑思路是一致的。...而KVO的源码又没有开源,所以我们就只能先从GNUstep的实现中来参考一二了。...[GNUstep Core Base](http://wwwmain.gnustep.org/resources/downloads.php?...site=ftp%3A%2F%2Fftp.gnustep.org%2Fpub%2Fgnustep%2F) 中有Foundation框架的实现。虽然可能与OC的实现不太一样,但是总体思路是一样的。...1.1 - addObserver: forKeyPath: options: context: 的实现 先来看一下源码,由于是GNUstep的开源框架,所以部分类型还是GS前缀,为了便于理解,我已添加一些注释
这个需要用到GNUstep的源码,虽然GNUstep不是苹果官方的源码,但是还是有很高的参考价值的 在GNUstep搜索observeValueForKeyPath 表示被观察对象收到了一个 -setValue
所以这本书的作者通过GNUstep的源码来推测了苹果Cocoa框架的实现。 下面开始针对每一个方法,同时用GNUstep和苹果的实现方式(追踪程序的执行和作者的猜测)来对比一下各自的实现。...GNUstep实现: alloc方法 //GNUstep/modules/core/base/Source/NSObject.m alloc: + (id) alloc { return [self...对象的引用计数可以通过retainCount方法来取得: GNUstep/modules/core/base/Source/NSObject.m retainCount: - (NSUInteger)...autorelease实现 和上文一样,我们还是通过GNUstep和苹果的实现来分别看一下。...GNUstep 实现 //GNUstep/modules/core/base/Source/NSObject.m autorelease - (id)autorelease { [NSAutoreleasePool
其中有几个思路:CFFounation、Swift中的Founation(开源)、GNUstep。其中:CFFounation根本就没有满足NSCopying协议;Swift虽然开源了,但是不够明确。...最终发现了GNUstep-翀鹰精灵。然后我打开了新世界。 ?
release 和 autorelease 的区别 4、无法释放非自己持有的对象,如果释放非自己持有的对象就会造成崩溃 alloc/retain/release/dealloc 实现 1、GNUstep...的实现 由于NSObject类的源代码没有公开,所以借助与苹果的Cocoa框架类似的GNUstep来理解苹果的Cocoa实现。...可以通过GNUstep的源代码确认一下 retainCount源代码 由对象寻址到对象内存头部,从而访问其中的 retained 变量。...2、苹果的实现 alloc类方法首先调用allocWithZone:类方法,这和GNUstep的实现相同,然后调用class_createInstance 函数,最后通过调用 calloc 来分配内存块...如图 GNUstep将引用计数保存在对象占用内存块头部的变量中,而苹果的实现,则是保存在引用计数表中的记录中。
configure: Using Apple Objective-C runtime checking for Apple Foundation library... yes configure: WARNING: GNUSTEP_SYSTEM_ROOT...is not defined in your environment, preventing the use of GNUstep's Foundation library configure: Using
不过,对于其他支持 Swift 但只有原始 GNUstep Objective-C 运行时的平台(如 Linux)来说就不是这样了。
应用场景:主要用于Mac OS X和GNUstep这两个使用OpenStep标准的系统,是NeXTSTEP和OpenStep的基础语言,广泛应用于苹果iOS和OS X系统的应用开发。
苹果和GNU各自维护一个开源的运行时 / GNUStep版本,这两个版本之间都在努力的保持一致。 平时的业务中主要是使用官方Api,解决我们框架性的需求。
用于协议独立的多址传播(PIM)服务的会合点发现(RP-DISC) 500 isakmp 互联网安全关联和钥匙管理协议(ISAKMP) 535 iiop 互联网内部对象请求代理协议(IIOP) 538 gdomap GNUstep
NSNotification相关 苹果并没有开源相关代码,但是可以读下GNUStep的源码,基本上实现方式很具有参考性 实现原理(结构设计、通知如何存储的、name&observer&SEL之间的关系等
但是我们退而求其次,我们可以在GNUStep的源码(http://www.gnustep.org/resources/downloads.php)中去探寻。
服务的会合点发现(RP-DISC) 500 isakmp 互联网安全关联和钥匙管理协议(ISAKMP) 535 iiop 互联网内部对象请求代理协议(IIOP) 538 gdomap GNUstep
Objective-C看到这个语言的标识,就知道和苹果有点关系了,它是扩充C的面向对象编程语言,主要使用于Mac OS X和GNUstep这两个使用OpenStep标准的系统。
领取专属 10元无门槛券
手把手带您无忧上云