iOS 3.1.3上的NSMutableAttributedString

问题描述:

我正在处理非常奇怪的情况。我在我的iOS应用程序中实现了Attributed Strings,并且我警告说他们可用的是iOS 3.2及更高版本。因为我仍然支持iPhone上的3.1.3版本,所以我知道我必须弱连接CoreText,并且在使用它之前可能需要一些编译时操作系统检查。iOS 3.1.3上的NSMutableAttributedString

我弱的联系框架,但出于好奇心,我只是使用类,并在3.1.3设备上运行它......它的工作原理。我在这里错过了什么,我很困惑,为什么这不会崩溃。我100%确定这是一个3.1.3设备,但在3.1.3上是NSMutableAttributedString一个隐藏类,因此实际上是因为objective-c的动态特性而工作的?

它真的工作,而不是只是没有崩溃?

根据设置,不存在的班级变成nil。请注意,在Objective-C中,您可以发送消息给nil。然后它只返回nil0。然后[[NSAttibutedString alloc] init]可能只是返回nil,而不会崩溃。

+0

我应该提供以下一块信息,就是我专门做的是(从AliSoftware @ https://github.com/AliSoftware/OHAttributedLabel)创建OHAttributedLabel, 本的UILabel子类使用NSAttributedStrings。我创建了一个NSMutableAttributedString,创建了一个OHAttributedLabel,并将它的NSAttributedString属性设置为所述属性字符串。 它是否遵循,即使设备不知道NSAttributedString是什么,使用NSAttributedString属性实例化一个对象会起作用? ...和'工作'我的意思是不会崩溃 – rrenna 2011-02-04 19:40:48

我是OHAttributedLabel类的作者。 感谢您使用它!

您的行为很奇怪,因为OHAttributedLabel使用CoreText框架在屏幕上绘制NSAttributedStrings。

由于CoreText仅适用于iOS 3.2以上版本,因此我无法了解它如何在iOS 3.2下工作,尤其是iOS 3.1.3 ...?

CoreText是在iOS 3.2中引入的。如果你的链接很弱,应用程序将会启动,但是它会在第一次调用CoreText函数时崩溃。

要继续与早期版本兼容,您可以通过使用Quartz绘制文本来避免错误链接并避免使用CT代码。您会检测设备上是否存在CT,如果是,则使用它,否则您的绘图会有粗糙的回退机制。