所以我试图测试我一直在研究的PhoneGap应用程序,并且在我的iPad上测试时遇到了一些问题。我有以下作为此应用程序的main
方法:
//
// main.m
// elog
//
// Created by Ben Potter on 9/08/11.
// Copyright Arden Anglican School 2011. All rights reserved.
//
#import <UIKit/UIKit.h>
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
[pool release];
return retVal;
}
一切正常,直到您完全关闭应用程序然后重新打开它,然后冻结。我不明白为什么。
我正在使用XCode 4.2在ipad上运行ios5
最后,这些是出现的错误,感谢您的帮助!
答案 0 :(得分:19)
您的应用程序正在使用自动引用计数(这是新的),而Phonegap尚不支持它。转到项目的构建设置并关闭“自动引用计数”。
答案 1 :(得分:9)
这就是我在XCode 4.3和PhoneGap 1.5中解决“NSAutoReleasePool”错误的方法。
转到Project Navigator中的“YourApplicationName”。
在“项目”下选择“YourApplicationName”。
转到“构建设置”。
确保切换“全部”和“合并”。
找到“Apple LLVM编译器3.1 - 语言”部分。
向下滚动,您会发现“Objective-C自动参考计数”。
将其从“是”更改为“否”
尝试再次构建项目,你应该没问题!
答案 2 :(得分:1)
所以,为了澄清视觉倾向,我花了几分钟才找到正确的选项,因为它只在另一个答案的评论中提到。我必须找到CLANG_ENABLE_OBJC_ARC
构建标志并将其切换为NO
。您可以在“用户定义”部分的“构建”设置下找到它(对我来说非常底部):
我也可以通过进入main.m
并注释掉NSAutoreleasePool
设置代码来解决运行时错误:
//NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
//[pool release];
return retVal;
但是,我不确定可能产生的其他影响。目前看来,在使用PhoneGap时,最好坚持手动重新计数,直到PhoneGap正确支持ARC。
就谷歌来说,导致我在这里的错误是“NSAutoreleasePool不可用”,因为我在原帖中没有看到它作为文本。
答案 3 :(得分:0)
如果您不想禁用ARC,则以下内容将修复Xcode 4.2中的错误。
AppDelegate.m
// self.window = [[[UIWindow alloc] initWithFrame:screenBounds]autorelease];
self.window = [[UIWindow alloc] initWithFrame:screenBounds];
// self.viewController = [[[MainViewController alloc] init] autorelease];
self.viewController = [[MainViewController alloc] init];
(void) dealloc
{
// [super dealloc];
}
的main.m
int main(int argc, char *argv[]) {
// NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
// int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
// [pool release];
// return retVal;
@autoreleasepool {
NSLog (@"Programming is fun!");
}
return 0;
}
声明:
不知道这会如何影响PhoneGap lib的其余部分插件。但是,在实现这些更改后,模板PhoneGap项目在模拟器上运行,但立即终止。这只是一个起点。
更好的选择:
我建议你在Build Settings下禁用自动引用计数(ARC),直到PhoneGap支持它。 PhoneGap论坛上的这个帖子提示ARC may be supported in PhoneGap 1.6.
答案 4 :(得分:0)
在cordova 2.1.0之前不支持ARC,您不应该在下面的框中打勾(当您仍在创建项目时):
但是,这是您需要的确切代码:
#import <UIKit/UIKit.h>
int main(int argc, char *argv[]) {
@autoreleasepool {
int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
return retVal;
}
}
如果你在Xcode 4.5.1中升级到cordova 2.1.0,你可以去: 编辑 重构 在Objective ARC和现代Objective-C语法之间做出选择。