- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在将 CGGradientRef 存储在 NSMutableArray 中时遇到问题。我必须用什么包装它才能将其存储在数组中以及如何解开它。
谢谢。
最佳答案
您不必将其包裹在任何东西中。只需将其转换到 id
并将其添加到数组中。您可以对从 CFType 派生的任何 CoreFoundation 类型(松散地以“Ref”结尾的任何类型)执行此操作。
或者,您可以将 NSMutableArray* 转换为 CFMutableArrayRef 并调用 CFArrayAppendValue()。这不再是类型安全的;它调用创建数组时指定的保留/释放回调。 (一个值得注意的异常(exception)是 -[NSDictionary setValue:forKey:] ,它复制键,而相应的 CFDictionary 函数则不复制键。有时,有一个由“可变”对象(例如 NSURLConnection,带有数据)作为键的字典会很好。 -就值而言);只要不违反哈希值不改变的要求,您就是安全的。)
CoreFoundation 类型是类似 OO 的类型,可以在“普通”C 中使用。使用一些巧妙的魔法(Apple 可以做到这一点,因为他们同时编写 CF 和 ObjC 运行时)、NSString、NSArray 和 NSDictionary 等类型的实例(默认情况下)是 CFString、CFArray 和 CFDictionary 的“真正”实例。 CF 类型位于类型层次结构中,其根为 CFType ;值得注意的方法有 CFRetain、CFRelease、CFEqual、CFHash 和 CFCopyDescription。这些大致对应于 -retain、-release、-isEqual:、-hash 和 -description(除了 -description 额外自动释放,并且它们对 NULL/nil 有不同的处理)。 Apple 将此称为“免费桥接”或“可互换数据类型”(不过,Mac 开发中心已不再提供 IDT 文章)。 Ridiculousfish 有一篇好文章,名为"Bridge" .
这意味着在大多数情况下,您可以将 CF 类型视为 Objective-C 对象。苹果并没有特别明显地表明这一点,但除了所有提到的“免费桥接”之外,还有一些内容假设它们是可以互换的。
@property (nonatomic, retain) __attribute__((NSObject)) ABAddressBookRef foo;
这样的东西这实际上意味着“发送它 -retain 和 -release,就好像它是一个 Objective-C 实例一样”。id
但它支持的唯一有记录的东西是 CGImageRef(它还支持 CABackingStore,这就是 -drawRect: 绘制的内容)。您可以做的其他有趣的事情包括定义 CFAutorelease .
关于iphone - 如何在 NSMutableArray 中存储 CGGradientRef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4240481/
我是一名优秀的程序员,十分优秀!