0

我有一个启用了 ARC 的 Mac 项目和一个未启用 ARC 的框架,所有编译都很好,但是一旦运行非 ARC 框架就会显示一个表单,但是当你点击一个按钮时,会抛出一个错误,比如......

2012-11-10 23:32:11.191 TestApp[20691:303] -[__NSCFType next:]: unrecognized selector sent to instance 0x101c13070
2012-11-10 23:32:11.193 TestApp[20691:303] -[__NSCFType next:]: unrecognized selector sent to instance 0x101c13070
2012-11-10 23:32:11.198 TestApp20691:303 doesNotRecognizeSelector:] + 186
3 CoreFoundation 0x00007fff8e63a5ce forwarding + 414
4 CoreFoundation 0x00007fff8e63a3b8 _CF_forwarding_prep_0 + 232
5 AppKit 0x00007fff8ff78a59 -[NSApplication sendAction:to:from:] + 342
6 AppKit 0x00007fff8ff788b7 -[NSControl sendAction:to:] + 85
7 AppKit 0x00007fff8ff787eb -[NSCell _sendActionFrom:] + 138
8 AppKit 0x00007fff8ff76cd3 -[NSCell trackMouse:inRect:ofView:untilMouseUp:] + 1855
9 AppKit 0x00007fff8ff76521 -[NSButtonCell trackMouse:inRect:ofView:untilMouseUp:] + 504
10 AppKit 0x00007fff8ff75c9c -[NSControl mouseDown:] + 820
11 AppKit 0x00007fff8ff6d60e -[NSWindow sendEvent:] + 6853
12 AppKit 0x00007fff8ff69744 -[NSApplication sendEvent:] + 5761
13 AppKit 0x00007fff8fe7f2fa -[NSApplication run] + 636
14 AppKit 0x00007fff8fe23cb6 NSApplicationMain + 869
15 AppSim 0x00000001000026f2 main + 34
16 libdyld.dylib 0x00007fff97c6c7e1 start + 0
17 ??? 0x0000000000000003 0x0 + 3

将主项目转换为非 ARC 问题出在......是什么导致了问题,我该如何解决?

我宁愿不将现有项目转换为使用非 ARC...

重现问题的步骤...

从以下位置下载“OS X Lion 的示例项目,~250 KB”

https://github.com/eternalstorms/ESSVideoShare-for-OS-X-Lion

将主项目转换为 ARC,将以 ... [yt uploadVideoAtURL:[NSURL fileURLWithPath 开头的行指向您拥有的任何 mov 文件,然后运行。

单击取消或登录将导致错误...

4

2 回答 2

2

您的示例代码存在内存泄漏:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Insert code here to initialize your application
    ESSYouTube *yt = [[ESSYouTube alloc] initWithDelegate:self
                                             developerKey:@""];
    [yt uploadVideoAtURL:[NSURL fileURLWithPath:@"/path/to/mov"]];
}

yt永远不会被释放。

当您通过添加 arelease或转换为 ARC 来堵住泄漏时,您将遇到崩溃,因为当 UI 仍在屏幕上时, ESSYouTubeand实例已被释放。ESSYouTubeWindowController

示例代码需要修复,并且ESSYouTube应该在其 UI 在屏幕上时保留自身,或者在解除分配时拆除其 UI。

于 2012-11-11T21:33:21.367 回答
1

You can have a project that has ARC and non-ARC assets. If you haven't already, I would set any classes that are not ARC enabled to not compile using ARC. Refer to here: How can I disable ARC for a single file in a project?

于 2012-11-11T20:29:47.180 回答