相关疑难解决方法(0)

为什么我看到有关NSAutoreleasePool不可用的消息警告?

知道为什么我收到这些消息:

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)

iphone xcode ios

3
推荐指数
2
解决办法
4783
查看次数

钥匙串ARC错误

我在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)

iphone xcode objective-c ios automatic-ref-counting

3
推荐指数
1
解决办法
840
查看次数

ios - 'autorelease is unavailable'错误和'ARC禁止显式消息发送autorelease'错误

我有一个工作正常的应用程序.然后我尝试将导航控制器嵌入到tabbarcontroller中,接下来我知道我在编译期间开始收到这些错误.

谁会知道为什么这些会发生?某些设置是否未经检查或意外检查?

谢谢,亚历克斯

reference-counting ios automatic-ref-counting ios6

3
推荐指数
1
解决办法
1万
查看次数

如何在后台线程中处理ARC?

我理解自动引用计数的工作原理:

在编译时,确定对象之间可能的关系类型,从而确定可能发生的版本,然后在运行时,跟踪每个对象的强指针引用数,并在该数字达到0时释放它.我还没有在概念或实践中遇到问题,至少在处理主线程时.

我注意到当我开始一个新的后台线程时,它不会释放任何生成的对象,直到线程结束.我举了一个例子:

在此输入图像描述

本质上,在线程调用周围放置了一个自动的"@autoreleasepool",因此显而易见的是,放置我自己的不会解决这个问题.事实上,我已经测试了相同的结果.如果我是正确的,那么强制池的存在正是导致我的问题,但我认为这是ARC可以在多线程应用程序上执行的最佳.内存使用缓慢而持续地倾斜.如果我将此线程留得太久,应用程序最终会耗尽内存.这是一个问题,因为线程需要能够在最坏的情况下无限期地运行.

我已经删除了线程中的一些主要分配.我相信我已经确定剩下的一些内存分配是从NSMutableArray释放的NSNumbers,因为我覆盖了它.

所以我想我将不得不做以下其中一件事:

  1. 完全删除线程中的一致分配.
  2. 将应用程序更改为非ARC以在后台线程中手动释放内存.
  3. 检测内存何时高,保存线程状态,与主线程同步以释放对象,然后恢复算法.
  4. 找出是否存在某种方式通知主线程或ARC我想要一个对象同步,以便它可以被释放.
  5. 意识到Apple实际上有一种方法来调度ARC以正确地异步处理另一个线程,并且从未在主参考页面上说出任何相关内容.
  6. 在具有分配对象(如字典)的文件中禁用ARC.如何为项目中的单个文件禁用ARC?

这些看起来都不是解决我问题的方法,尽管我可能会尝试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

3
推荐指数
1
解决办法
2019
查看次数

使用Swift导入aurioTouch库

我正在尝试将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

objective-c core-audio ios swift

3
推荐指数
1
解决办法
1241
查看次数

我如何知道哪个文件已打开ARC以及哪个文件已关闭ARC?

ARC代表自动参考计数.

我刚刚升级了我的项目以使用ARC.不是全部.一些.

我怎么知道?

xcode automatic-ref-counting

2
推荐指数
1
解决办法
839
查看次数

Xcode 4.4 - 无法为编译源添加编译器标志

在Xcode 4.4中,我似乎无法将编译器标志添加到单个源文件中.我试图从单个文件中删除ARC,但我无法弹出添加标志.双击或选择项目并按Enter键不起作用,也尝试选择多个并按下输入不起作用.我尝试过两个独立的项目,其中一个是我用Xcode 4.4创建的.是否有另一种手动将编译器标志添加到源文件的方法?(我没有旧版本的Xcode来查看它如何存储值[可能在pbxproj中]).

注意:MacBook Pro带Retina显示屏 - OSX 10.8

xcode objective-c compiler-flags automatic-ref-counting

2
推荐指数
1
解决办法
1802
查看次数

使用NSDecimalNumber for Fibonacci系列与Binet的公式

今天我花了相当多的时间试图计算斐波纳契第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)

cocoa objective-c fibonacci nsdecimalnumber

2
推荐指数
1
解决办法
1512
查看次数

无法在Xcode 5中添加编译器标志

您好我最近安装了Xcode 5,但无法添加编译器标志.我想为自动引用计数添加编译器标志但是当我去构建阶段=>编译sources => .m文件并双击它或在选择它时按Enter键时,不会出现输入编译器标志的弹出窗口.

如何解决这个问题?谢谢

compiler-flags xcode5

1
推荐指数
1
解决办法
6001
查看次数

iOS 中是否有等效的 Android 共享首选项来保存凭据(用户名和密码)?

来自Android开发,我使用SharedPreferences存储用户名和密码以使用OutputStreamWriterHttpURLConnection登录到服务器。现在在iOS 中我使用NSMutableURLRequest发送用户名和密码。是否有任何的iOS存储喜欢的用户名和密码SharedPreferences的iOS?请记住,这是敏感数据,因此需要确保安全。

passwords cocoa-touch credentials ios

1
推荐指数
1
解决办法
5217
查看次数