知道为什么我收到这些消息:
NSAutoreleasePool不可用:在自动引用计数模式下不可用
ARC禁止"发布"的显式消息发送
在这段代码中:
#import <UIKit/UIKit.h>
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
Run Code Online (Sandbox Code Playgroud) 我在XCode中使用以下代码,为启用了ARC的iOS构建.为什么会出现这些错误?

这是我的代码:
KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"Test" accessGroup:nil];
[keychainItem setObject:@"Test" forKey:kSecAttrService];
[keychainItem setObject:password.text forKey:kSecValueData];
[keychainItem setObject:username.text forKey:kSecAttrAccount];
Run Code Online (Sandbox Code Playgroud) 我有一个工作正常的应用程序.然后我尝试将导航控制器嵌入到tabbarcontroller中,接下来我知道我在编译期间开始收到这些错误.
谁会知道为什么这些会发生?某些设置是否未经检查或意外检查?
谢谢,亚历克斯
我理解自动引用计数的工作原理:
在编译时,确定对象之间可能的关系类型,从而确定可能发生的版本,然后在运行时,跟踪每个对象的强指针引用数,并在该数字达到0时释放它.我还没有在概念或实践中遇到问题,至少在处理主线程时.
我注意到当我开始一个新的后台线程时,它不会释放任何生成的对象,直到线程结束.我举了一个例子:

本质上,在线程调用周围放置了一个自动的"@autoreleasepool",因此显而易见的是,放置我自己的不会解决这个问题.事实上,我已经测试了相同的结果.如果我是正确的,那么强制池的存在正是导致我的问题,但我认为这是ARC可以在多线程应用程序上执行的最佳.内存使用缓慢而持续地倾斜.如果我将此线程留得太久,应用程序最终会耗尽内存.这是一个问题,因为线程需要能够在最坏的情况下无限期地运行.
我已经删除了线程中的一些主要分配.我相信我已经确定剩下的一些内存分配是从NSMutableArray释放的NSNumbers,因为我覆盖了它.
所以我想我将不得不做以下其中一件事:
这些看起来都不是解决我问题的方法,尽管我可能会尝试1或6.有没有人有建议?
更新:
我运行了相同的算法但是在代码中添加了以下自动释放块,起初我认为我会反驳rmaddy和Aaron Brager的回答.
-(void)setInt: (int)value For: (NSString *)variableName {
@autoreleasepool {
[self.intDictionary setValue:@(value) forKey:variableName];
}
}
-(void)setBool: (bool)value For: (NSString *)variableName {
@autoreleasepool {
[self.boolDictionary setValue:@(value) forKey:variableName];
}
}
Run Code Online (Sandbox Code Playgroud)
以下是生成的内存分配图:

他们是对的.我很高兴在这种情况下我错了.这意味着我的编码将比我开始想象的要容易得多.
multithreading memory-management objective-c ios automatic-ref-counting
我正在尝试将Objective-C应用程序转换为swift.
我想将aurioTouch中的类导入Swift应用程序,因此我创建了以下Bridging-Header文件:
#import "AudioController.h"
Run Code Online (Sandbox Code Playgroud)
但我在DCRejectionFilter.h,BufferManager.h,FFTHelper.h中收到以下错误:
未知的类型名称'class'; 你的意思是'上课'吗?
预期';' 在顶级声明者之后
以及AudioController.h:
未知类型名称'BufferManager'
未知类型名称'DCRejectionFilter'
当然我使用.mm而不是.m,但这不起作用.
更新
包含aurioTouch库(带Obj-C和C++)的简单快速项目如下:https: //github.com/pika-shi/aurioTouch-Sample
ARC代表自动参考计数.
我刚刚升级了我的项目以使用ARC.不是全部.一些.
我怎么知道?
在Xcode 4.4中,我似乎无法将编译器标志添加到单个源文件中.我试图从单个文件中删除ARC,但我无法弹出添加标志.双击或选择项目并按Enter键不起作用,也尝试选择多个并按下输入不起作用.我尝试过两个独立的项目,其中一个是我用Xcode 4.4创建的.是否有另一种手动将编译器标志添加到源文件的方法?(我没有旧版本的Xcode来查看它如何存储值[可能在pbxproj中]).
注意:MacBook Pro带Retina显示屏 - OSX 10.8
今天我花了相当多的时间试图计算斐波纳契第n项,当时n是一个非常大的数.我决定使用Objective-C,事后看来可能不是最好的决定,考虑到它花了多长时间.我研究并决定使用Binet的公式,这似乎适用于使用其他编程语言的其他人.
double phi = (sqrt(5) + 1) / 2.0;
long long j = (long long) round(pow(phi, number) / sqrt(5));
Run Code Online (Sandbox Code Playgroud)
是C中的fibonacci(数字)函数的要点.我尝试使用NSDecimalNumber将其转换为Objective-C,我的方法如下所示:
NSDecimalNumber* squareRootOfFive = [NSDecimalNumber decimalNumberWithString: [[NSNumber numberWithDouble:sqrt(5)] stringValue]];
NSDecimalNumber* phi = [[squareRootOfFive decimalNumberByAdding:[NSDecimalNumber one]] decimalNumberByDividingBy:[NSDecimalNumber decimalNumberWithString:@"2"]];
return [[[phi decimalNumberByRaisingToPower: number] decimalNumberByDividingBy:squareRootOfFive] decimalNumberByRoundingAccordingToBehavior: [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode: NSRoundPlain scale:2 raiseOnExactness:NO raiseOnOverflow:YES raiseOnUnderflow:NO raiseOnDivideByZero:NO ]];
Run Code Online (Sandbox Code Playgroud)
我知道,非常可读.此代码适用于第一个X Fibonacci数,X大于700但小于800.我最终得到此错误/输出:
2013-02-01 17:27:19.977 Euler25 [14907:303]斐波纳契数792有166位数
2013-02-01 17:27:19.989 Euler25 [14907:303]***由于未捕获的异常'NSDecimalNumberOverflowException'终止应用程序,原因:'NSDecimalNumber溢出异常'
***第一次抛出调用堆栈:
0 CoreFoundation 0x00007fff8c3b10a6 __exceptionPreprocess + 198
1 libobjc.A.dylib 0x00007fff880443f0 objc_exception_throw + 43
2 CoreFoundation 0x00007fff8c3b0e7c +[NSException raise:format:] + …Run Code Online (Sandbox Code Playgroud) 您好我最近安装了Xcode 5,但无法添加编译器标志.我想为自动引用计数添加编译器标志但是当我去构建阶段=>编译sources => .m文件并双击它或在选择它时按Enter键时,不会出现输入编译器标志的弹出窗口.
如何解决这个问题?谢谢
来自Android开发,我使用SharedPreferences存储用户名和密码以使用OutputStreamWriter和HttpURLConnection登录到服务器。现在在iOS 中我使用NSMutableURLRequest发送用户名和密码。是否有任何的iOS存储喜欢的用户名和密码SharedPreferences中的iOS?请记住,这是敏感数据,因此需要确保安全。
ios ×6
objective-c ×5
xcode ×4
iphone ×2
cocoa ×1
cocoa-touch ×1
core-audio ×1
credentials ×1
fibonacci ×1
ios6 ×1
passwords ×1
swift ×1
xcode5 ×1