- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我是 LLVM 和 Objective-C 自动引用计数的新手,对从我的 Objective-C 函数返回 CGImageRefs 有疑问。在手动引用计数的时代,可以简单地将 CGImageRef 转换为 id
,自动释放它,然后返回原始 CGImageRef。使用 ARC,我知道您可以指示 ARC 系统自动释放并返回您的可保留对象,但我没有看到为 CFTypeRefs 执行此操作的方法。
这是我在禁用 ARC 的情况下可以做的事情:
- (CGImageRef)image {
CGImageRef myImage;
id myImageID = (id)myImage;
[myImageID autorelease];
return myImage;
}
因此,我基本上想创建一个方法,使用 ARC 返回一个不属于调用者的 CGImageRef。如果有更好的方法来做同样的事情,我愿意接受各种想法。我知道 UIImage
使用 CGImage
属性执行此类操作。
编辑:虽然为特定文件禁用 ARC 是执行此操作的有效方法,但我更愿意在我的代码中使用纯 ARC。这在与其他人共享特定文件的特定代码时会派上用场,因为他们不需要更改任何给定文件的build设置。为了利用 ARC 系统自动释放 CFTypeRef,您可以这样做:
__attribute__((ns_returns_autoreleased))
id CGImageReturnAutoreleased (CGImageRef original) {
// CGImageRetain(original);
return (__bridge id)original;
}
然后只需执行 return (__bridge CGImageRef)CGImageReturnAutoreleased(myImage)
即可返回自动释放的图像。
最佳答案
从 OS X 10.9 和 iOS 7.0 开始,公共(public) SDK 包含一个 CFAutorelease
函数。
你可以像这样创建一个效用函数:
void cfAutorelease(CFTypeRef *ref) {
[[(id)ref retain] autorelease];
}
并将其放入您在禁用 ARC 的情况下编译的文件中。您需要传递编译器标志 -fno-objc-arc
以禁用该文件的 ARC。在 Xcode 4 中,选择您的项目,然后选择 Build Phases 选项卡。打开编译源部分。双击包含实用函数的文件,在弹出框中输入-fno-objc-arc
。
关于objective-c - 使用 ARC 返回自动释放的 CFTypeRef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7855969/
我想从我的钥匙串(keychain)中获取用户名/密码。为此,我遵循了本指南: Simple iPhone Keychain Access 但是这部分在 ARC 中是不允许的: NSData *res
我有一个返回 CFTypeRef 的函数。我不知道它到底是什么。我如何确定?例如,它可能是一个 CFStringRef。 最佳答案 CFGetTypeID() : if (CFGetTypeID(my
为了测试,我创建了一个模拟类,它包装了 Security框架功能。一切正常,除了我试图伪造 SecItemCopyMatching(_:_:) 。完整的签名是: func SecItemCopyMat
我是 LLVM 和 Objective-C 自动引用计数的新手,对从我的 Objective-C 函数返回 CGImageRefs 有疑问。在手动引用计数的时代,可以简单地将 CGImageRef 转
我正在尝试调用 SecItemCopyMatching在我的钥匙串(keychain)实用程序类中,以便从钥匙串(keychain)中获取数据,但我在获取 result 时遇到了问题参数,Unsafe
CFTypeRef focusedWindow; AXUIElementCopyAttributeValue( frontMostApp, kAXFocusedWindowAttrib
如何从 Swift 2.3 覆盖此函数到 Swift 3 let unmanagedPhones = ABRecordCopyValue(person, kABPersonPhoneProperty
这段代码产生了预期的调试输出 type = AXUIElement,但转储堆栈并表示动态转换在实际转换点失败: func mainWindow() { var ptr: Unmanaged?
有没有一种简单的方法可以将 CTypeRef 转换为特定的 CoreFoundation 类型?我不想将内联转换为 (CFStringRef)myObjectRef,而是想创建一个辅助方法来为所有 C
我想将 objective-c 代码转换为 objective-c pp 并在我的应用程序中使用它。给定以下代码: CFTypeRef dynamicValue = (__bridge
我正在使用this link对于存储联系信息,我认为 ARC 没有什么问题。 当我使用下面的代码时,它工作正常。 ABAddressBookRef libroDirec = ABAddressBook
我正在尝试这个 Using the Keychain to store passwords on iOS storybored 用于存储用户电子邮件 和用于登录的密码。 在我的 m 文件中: ....
以下代码中会发出警告。使用 ARC。 if ( aAnim ) { [UIView beginAnimations:nil context:CFBridgingRetain([NSNumber
在 Swift 中我如何转换 CFStringRef[]和 CFTypeRef[]至 CMutablePointer ? 我想调用CFDictionaryCreate来自 swift 。我已经定义:
我的项目中有一个 below util 方法。我在之前的 iOS 10 版本中没有遇到任何问题。 + (CGRect)boundsRectWithSize:(id)objView { retu
我正在尝试将一些 Apple 代码(来自 SquareCam 示例)转换为 ARC。我将 Apple 代码标记为编译为非 ARC,它可以工作,但在非 ARC 上下文和 ARC 上下文之间传递图像时遇到
我是一名优秀的程序员,十分优秀!