关于objective-c

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于objective-c相关的知识,希望对你有一定的参考价值。

while (obj = [array objectEnumerator])
请问这句话如何理解?
//注意是objective-c语言并且这里是单等号。

NSEnumerator *enumerator = [myArray objectEnumerator];
id anObject;
while (anObject = [enumerator nextObject])
/* code to act on each element as it is returned */


这个是官方文档里对objectEnumerator的用法的实例,第一行返回一个枚举器,然后向这枚举器发送nextObject方法获取数组里的对象,枚举完了返回nil,while为假退出。
参考技术A objectEnumerator是一个方法,列举出array中的元素。用=是判断数组中这个元素是不是空的,是空的就不执行,while里面的方法。不是空的,数组里面这个元素值赋值给obj,并调用while里面的方法追问

while里面不是应该是BOOL值吗,为什么为nil就不执行,不为nil就执行呢?

Objective-C关于非ARC模式下的对象引用计数

Objective-C是一门简洁、强大、灵活的既具有面向对象特性也具有函数式编程特性的编程语言。由于它是C语言的马甲,也就是说,Objective-C可以将其源代码先转为纯C语言然后再编译为最终的目标代码,所以我们也可以用它来写纯C语言代码,它与C是完全兼容的!(这点与C++在语法特性上跟C语言兼容的特性不同)

由于有不少Objective-C爱好者对于ARC模式下的Objective-C感到十分困惑,所以希望能深入了解一下传统非ARC模式下的编程法则。通过对非ARC模式Objective-C工作模式的认知,我们甚至可以对整个Cocoa Framework的运行核心做更深层的认知。为何我不推荐使用ARC模式呢?

你用了ARC就得去记__strong、__weak、__unsafe_unretained、__autoreleasing、__bridge等等杂七杂八的关键字~这些乱七八糟的概念本身会把你搞晕,而且当你半懂不懂的时候一旦乱用反而会产生各种奇怪的bug~这些玩意儿倘若充斥在你的代码中,一来很丑,二来对于一些新手很容易被弄晕……所以说,ARC这货自其出生就带来了许多灾难!

而反观传统的非ARC模式,property就一个assign,一个retain,NSObject里就调用retain/release和autorelease方法~而且Apple对此的规则也非常简单——“不是你创建的就不需要你释放;是你创建的你才去释放它。”这一句话就能解决所有问题~

除此之外,无论你用ARC还是非ARC,你都需要搞懂Apple Cocoa Framework的消息循环机制,即autorelease是如何工作的。否则你的assign或weak属性的Objective-C对象啥时候被释放也都不会知晓~

综上所述,如果为了编程方便、可维护、可扩展,我们完全可以把ARC编译选项给关掉!另外,在Objective-C中往往把“方法调用”阐述为“消息发送”。比如[obj msg]一般大家描述为obj对象调用其msg成员方法。而正式用语上应该描述为向obj对象发送msg消息。在哪个对象的方法里执行这条语句的,那么称该对象为消息发送者;msg称为消息(即方法);obj则称为消息接收者。讲了那么多,下面开始切入正题!

在基于Foundation/Cocoa Framework的Objective-C中,我们定义一个类往往需要继承NSObject这一Foundation的基类。当我们调用NSObject的alloc类方法时,就会给要创建的对象分配存储空间;然后紧接着调用NSObject的init成员方法对创建的对象做初始化。这里就会对此对象做引用计数设置为1的操作。在基于Foundation/Cocoa Framework的Objective-C与传统的C++不同,它全面通过为每一对象指定引用计数来确定其生命周期。当某个对象的引用计数被减到0时,会触发调用该对象的dealloc成员方法。而上述的init方法就已经把对象的引用计数设置为1了。当我们调用NSObject的release成员方法时,该对象的引用计数减1。当我们调用NSObject的retain成员方法时,该对象的引用计数加1。通常,我们不要自己去重写NSObject的release与retain成员方法

以上是关于关于objective-c的主要内容,如果未能解决你的问题,请参考以下文章

30分钟学会Objective-C

iOS开发那些事儿热补丁

Objective-C 和 Swift 语言,哪个更容易学习?

再聊面试,这次关于钱,关于培训,关于内卷

关于数学,关于年少的感动,关于初心

scrapy 关于 rule, 关于多页