为什么UIFont支持mutableCopy选择器?

时间:2014-03-07 07:57:44

标签: objective-c

我们有UIMutableFont还是什么?

如果我想要相同的字体但又要稍微大一点,该怎么办?

更新:我测试了它会导致运行时错误。然后问题就改变了。为什么它是运行时错误而不是编译错误。

[self.Title.font mutableCopy]

实际上会编译

2 个答案:

答案 0 :(得分:3)

来自mutableCopy 文件(强调我的):

  

这是采用该方法的类的便捷方法   NSMutableCopying协议。 如果没有,则会引发异常   mutableCopyWithZone:的实施。

来自NSMutableCopying Protocol Reference参考:

  

NSMutableCopying声明了一个方法mutableCopyWithZone:,但是可变复制是   通常用便捷方法mutableCopy调用。   mutableCopy方法是为所有NSObjects 定义的,只是调用   mutableCopyWithZone:使用默认区域。

所以

 [someObject mutableCopy];

始终编译,但如果对象未实现则在运行时失败 mutableCopyWithZone:

copy vs copyWithZone:也是如此。

答案 1 :(得分:1)

UIFont是不可变的,我们没有UIMutableFont的选项。它不支持mutableCopy选择器,因为它不符合NSMutableCopying。

但是,如果要更改字体对象的大小,可以使用 fontWithSize: API。 例如:

//creating font

UIFont *someFont = [UIFont fontWithName:@"font-name" size:15.0f];

UIFont *biggerFont = [someFont fontWithSize:17.0f];

不幸的是,您必须为不同的大小保留单独的Font对象。 我认为最好的方法是保持Font宏像:

#define HEL_NEUE(xx)                    [UIFont fontWithName:@"HelveticaNeue" size:xx]

您可以在任何地方使用它,并相应地传递所需的大小。