我有以下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
的情况下被垃圾回收。
答案 0 :(得分:1)
是的,这很安全。 CGEvent
属性的documentation指出:
返回的
CGEventRef
不透明类型会自动释放。如果无法创建与CGEventRef
对象相对应的NSEvent
对象,则此方法返回NULL
。
这告诉您创建了一个新的CGEvent
,对应于NSEvent
。如果存在危险依赖关系,例如返回值包含对原始对象的不安全引用,该引用将被记为(有/有这样做的方法,并且已经记录在案[是的,我还没有检查是否仍然存在]) / em>。
顺便说一句:如果您在ARC时代长大并且不了解“自动发布”,请不要担心自己,ARC知道并且会做正确的事。