- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我以两种方式拦截 CGEventRef
:
NULL
以终止事件CGEventCreateKeyboardEvent()
为事件分配一个新的 CGEventRef
Xcode 的分析器告诉我在创建新事件时存在潜在泄漏。但是我需要返回那个新事件,所以我不能在那里CFRelease
。
这个 Xcode 错误是否有效?
我应该在哪里正确CFRelease
我创建的新 CGEventRef?
无论是空事件还是新事件,我都不知道是否需要释放事件之前的值。
在方法名称后附加“new”是否是解决此问题的正确方法?我认为可能是这样,例如我创建一个新事件时的情况。但是其他情况呢?
.
- (CGEventRef)modifySomeKeyboardEvents:(CGEventRef)event {
CGKeyCode keycode = (CGKeyCode)CGEventGetIntegerValueField(event, kCGKeyboardEventKeycode);
NSLog(@"keycode: %d", keycode);
switch (keycode) {
case 0:
NSLog(@"pressed 'a'");
//Kill the event
event = NULL;
//Is a `CFRelease` of some kind needed here, to release the previous value?
break;
case 38:
NSLog(@"pressed 'h'");
//Send different character:
CGEventSourceRef eventSource = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
CGEventRef newKeyEvent = CGEventCreateKeyboardEvent(eventSource, 1, true);
CGEventSetIntegerValueField(newKeyEvent, kCGKeyboardEventKeycode, 51); // keycode '51' = backspace
CFRelease(eventSource);
event = newKeyEvent;
//Can't CFRelease here, but somewhere?
//CFRelease(newKeyEvent);
break;
default:
break;
}
//Xcode error: "Potential leak of an object stored in newKeyEvent"
return event;
}
最佳答案
The CGEventTapCallback
documentation说
After the new event has been passed back to the event system, the new event will be released along with the original event.
因此,您不负责发布新事件或旧事件。
分析器不知道这一点,所以你需要告诉它。您可以通过将 new
放在方法名称的 beginning 来使分析器静音,但使用 copy
可能会更清楚,这也会使分析器静音警告:
- (CGEventRef)copyOrModifyKeyboardEvent:(CGEventRef)event {
(我想 newOrModifiedKeyboardEvent:
也可以。)
我相信分析器也应该对此进行标记,因为它现在在您仅返回输入事件时无法返回 +1 引用计数。但在我的测试中,它没有。 Xcode 4.6.2 分析器没有给我这个方法的警告:
- (CGEventRef)copyOrModifyEvent:(CGEventRef)event {
CGEventRef newEvent;
if (CGEventGetIntegerValueField(event, kCGKeyboardEventKeycode) == 38) {
newEvent = CGEventCreate(NULL);
} else {
newEvent = event;
}
return newEvent;
}
关于xcode - 如何 CFRelease 必须返回的 CGEventRef?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16094398/
以下代码导致我的 C++ 应用程序崩溃: CFMutableDictionaryRef property_dictionary = CFDictionaryCreateMutable( kCFAllo
这让我大吃一惊。我从 iPod 库中读取音频以分析音频样本,我可以做我想做的事,缓冲区总是泄漏,我收到低内存警告并且应用程序被终止。我尝试了所有建议但没有成功。下面的代码被合并到一个静态库中并且读取音
我正在学习 iOS 编程。 我编写了关联地址的代码。 有很多方法。喜欢 我正在划分一个小组。 这是组1 ABAddressBookCreate(); ABRecordCopyCompositeName
我有一个代码行,我在下面提到的行中一直崩溃。 ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error
这个问题在这里已经有了答案: When do I use CFRelease? (2 个答案) 关闭 9 年前。
我有清除设备中地址簿的方法。方法如下。 -(void) clearAdressBook { ABAddressBookRef addrBook=ABAddressBookCreate();
我们的一位测试人员报告了以下崩溃: 0 APP_NAME_WAS_HERE 0x00074892 testflight_backtrace + 158 1 APP_NAME_WAS_HERE 0x00
以下是来自 Omni frameworks 的代码片段: CGMutablePathRef path = CGPathCreateMutable(); CGPathAddRect(path, NULL
我以两种方式拦截 CGEventRef: 返回值 NULL 以终止事件 通过 CGEventCreateKeyboardEvent() 为事件分配一个新的 CGEventRef Xcode 的分析器告
我的代码有一个非常奇怪的错误。事实上,根本没有错误,只是调试器以“程序收到信号:“EXC_BAD_ACCESS””消息开始。谁能帮我?我非常困惑...谢谢。 -(NSString *)fullName
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我正在尝试合并四张图片以使其成为一张 uiimage。但是当我要执行 CFRelease 时,它崩溃了。如果我不这样做,就会导致内存泄漏和崩溃。如何解决? 请参阅下面的代码。 refere
ABAddressBook 发生了一件奇怪的事情。这是一些代码: - (NSArray*)addressBookArray { ABAddressBookRef addressBook = N
我正在处理我的一个处于维护阶段的项目,所以我没有太多的自由来一次更改一个主要 block ,在处理这个时,我在模拟器和设备上都看到了这个随机崩溃而应用程序与服务器同步。流动性登录->上传本地数据到服务
CMSampleBufferRef sampleBuffer = [assetOutput copyNextSampleBuffer]; CMBlockBufferRef buffer = CMSam
我有点困惑。我读过的所有地方都建议在使用 ARC 时,你仍然需要释放核心基础对象,这是有道理的,ARC 不管理它们。但是,我有一个方法使用了一些 CF 方法/对象,我在这些方法/对象上使用了 CFRe
这是我的代码,运行最后一行CFRelease(addressBook),程序崩溃!帮帮我~! ABAddressBookRef addressBook = ABAddressBookCreateWit
我有以下方法: + (NSString*) getMD5HashFromFile:(NSString*)filePath { CFStringRef md5hash = FileMD5Hash
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)i
我刚刚全身心投入到 iOS 开发中,目前在 queryServer 函数末尾的 CFRelease 函数中出现运行时错误(我在突出显示的行上添加了注释)但我没有如果我注释掉对 extractIPFro
我是一名优秀的程序员,十分优秀!