创建“NSEvent 对象”然后“CGEventPost”“[ev CGEvent]”然后退出该方法是否安全?
Is it safe to create `NSEvent object` then `CGEventPost` the `[ev CGEvent]` then exit the method?
我有以下 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
时被垃圾收集。
是的,它很安全。 CGEvent
属性 的 documentation 状态:
The CGEventRef
opaque type returned is autoreleased. If no CGEventRef
object corresponding to the NSEvent
object can be created, this method returns NULL
.
这告诉您 创建了一个新的 CGEvent
, 对应 NSEvent
。如果存在 危险的 依赖项,例如return 值包含对原始对象的不安全引用,该引用将被记录 (有 was/are 方法 did/do 和 were/are 如此记录 [是的,我还没有检查是否仍然存在]).
顺便说一句:如果你在 ARC 时代长大并且不了解 "autoreleased",请不要担心,ARC 知道并且会做正确的事。
我有以下 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
时被垃圾收集。
是的,它很安全。 CGEvent
属性 的 documentation 状态:
The
CGEventRef
opaque type returned is autoreleased. If noCGEventRef
object corresponding to theNSEvent
object can be created, this method returnsNULL
.
这告诉您 创建了一个新的 CGEvent
, 对应 NSEvent
。如果存在 危险的 依赖项,例如return 值包含对原始对象的不安全引用,该引用将被记录 (有 was/are 方法 did/do 和 were/are 如此记录 [是的,我还没有检查是否仍然存在]).
顺便说一句:如果你在 ARC 时代长大并且不了解 "autoreleased",请不要担心,ARC 知道并且会做正确的事。