0

我有以下 Objective-C 片段:

void toggle()
{
    NSEvent* down_event = [NSEvent keyEventWithType: NSEventTypeKeyDown
                                           location: NSZeroPoint
                                      modifierFlags: 0
                                          timestamp: 0.0
                                       windowNumber: 0
                                            context: nil
                                         characters: @" "
                        charactersIgnoringModifiers: @" "
                                          isARepeat: false
                                            keyCode: kVK_Space ];


    CGEventPost(kCGHIDEventTap, [down_event CGEvent]);
}

该项目已启用 ARC。

这是安全的,还是我遇到了偶尔的内存访问错误?

我担心NSObject在系统仍在使用它时可能会被垃圾收集CGEvent

4

1 回答 1

1

是的,它是安全的。该物业的文件CGEvent指出:

返回的CGEventRefopaque 类型是自动释放的。如果无法创建该CGEventRef对象对应的NSEvent对象,则该方法返回NULL

这告诉您创建一个CGEvent与. 如果存在危险的依赖关系,例如返回值包含对原始对象的不安全引用,将被记录(有/有方法这样做/这样做并且已经/如此记录[是的,我没有检查是否有仍然存在])NSEvent

顺便说一句:如果您在 ARC 时代长大并且不了解“自动发布”,请不要担心自己,ARC 知道并且会做正确的事情。

于 2019-07-06T17:18:22.663 回答