小编Ron*_*Ron的帖子

在iOS中观察内存使用情况

有没有办法找出iOS中可用的内存量?我知道当可用内存不足时,系统会传递低内存警告.但是,我的应用程序有一些点,单个线程将执行复杂的任务,有时该任务耗尽足够的内存,它只是由操作系统终止(我的应用程序可以从互联网上下载图片,我将它们缩小到一个小大小...如果用户下载一个非常大的图像,我的应用程序内存不足,只是'poof').

让应用程序自发终止显然是一种糟糕的用户体验.

当我即将耗尽内存并停止任务时,有什么方法可以找到?

我想我可以将任务放在一个单独的线程上,也许系统会向主线程发送一个低内存警告,但这似乎很复杂,甚至不能保证工作.

谢谢!罗恩

iphone ios

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

UIWebView方法loadHTMLString:和loadRequest之间的区别

我有一个UIWebView,我想加载一个SVG图像.该文件的内容是纯SVG即<svg>...</svg>.该文件可以正常加载到普通和Safari,也可以使用loadRequest加载到UIWebView中:执行以下操作:

url = [NSURL fileURLWithPath:path];
NSURLRequest *req = [NSURLRequest requestWithURL:url];
[webView loadRequest:req];
Run Code Online (Sandbox Code Playgroud)

但是,如果我将文件的内容加载到字符串中,并尝试将HTML字符串加载到webview中,则不会显示任何内容:

html = [NSString stringWithContentsOfFile:path
                                encoding:NSASCIIStringEncoding
                                   error:nil];
[webView loadHTMLString:html baseURL:nil];
Run Code Online (Sandbox Code Playgroud)

上述两种技术之间有什么理由吗?他们不应该给出相同的结果吗?该文件是纯ASCII,所以我认为没有编码问题.

我想我现在可以通过使用文件获得我需要完成的工作,但我讨厌将文件系统用于非持久性数据.

任何帮助是极大的赞赏!!!

谢谢,罗恩

iphone ios

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

如何跨设备为对象创建唯一ID

我正在开发一个应用程序,允许用户在多个设备上编辑同一个数据库.编辑将包括添加/删除/修改对象,因此为了使同步工作更容易,我想为对象分配唯一的ID,并且我希望减少这些ID与在其他设备上独立生成的ID冲突的可能性.

我的一个想法是使用当前时间生成唯一ID.我目前正在考虑创建这样的ID:

unsigned long long idNumber = ([NSDate timeIntervalSinceReferenceDate] * 1000000);

这将创建一个64位整数,这是自参考日期以来的微秒数.我相信这个数字需要50万年左右来包装,所以我不认为我需要担心任何Y2K类型的问题.

我可以将NSTimeInterval存储为ID,但是我对比较双倍的平等感到不舒服,即使它可能会起作用.除此之外,我可以将64位整数转换为字符串并从字符串转换而不会丢失任何精度,我不认为我可以对双打说同样的话.

这对我来说有点像"黑客",虽然我看不出有什么理由不起作用.它似乎也可以移植到支持"unsigned long long"的任何设备上.我唯一的问题是我需要使用8个字节来存储ID,虽然我不希望系统中的ID数量那么大,所以我不认为ID中的内存/磁盘使用量应该是是个大问题.

任何想法/警告/建议将不胜感激.

谢谢,罗恩

ios

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

将NSString转换为UTF32和从UTF32转换

我正在使用包含UTF32字符的十六进制代码的数据库.我想把这些字符存储在NSString中.我需要有两种方式转换的例程.

要将NSString的第一个字符转换为unicode值,此例程似乎有效:

const unsigned char *cs = (const unsigned char *)
    [s cStringUsingEncoding:NSUTF32StringEncoding];
uint32_t code = 0;
for ( int i = 3 ; i >= 0 ; i-- ) {
    code <<= 8;
    code += cs[i];
}
return code;
Run Code Online (Sandbox Code Playgroud)

但是,我无法做反向(即采用单个代码并将其转换为NSString).我想我可以通过简单地创建一个带有UTF32字符的c字符串,并按照正确的顺序使用字节,然后使用正确的编码从中创建一个NSString.

但是,转换到cstrings /从cstrings转换对我来说似乎并不可逆.

例如,我尝试过这段代码,"tmp"字符串不等于原始字符串"s".

char *cs = [s cStringUsingEncoding:NSUTF32StringEncoding];
NSString *tmp = [NSString stringWithCString:cs encoding:NSUTF32StringEncoding];
Run Code Online (Sandbox Code Playgroud)

有谁知道我做错了什么?我应该使用"wchar_t"作为cstring而不是char*吗?

任何帮助是极大的赞赏!

谢谢,罗恩

iphone unicode ios

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

如何在iPhone应用程序中实现密码恢复?

我想在我正在处理的iPhone应用程序中添加简单的密码保护.我可能会使用crypt()将密码以CoreData/sqlite格式存储在我的数据库中.

我想我对如何创建和存储密码非常了解,但是如果用户忘记了密码,我想添加密码恢复能力

这是我在iOS中苦苦挣扎的部分.我希望一切都是本地的,所以我想不出使用链接重置密码的方法.

我曾考虑过通过电子邮件发送密码,但在iOS中,如果没有持有设备的人看到电子邮件的内容,就无法发送电子邮件.

我能想到的唯一方法是拥有一个或两个"备份密码",这基本上是用户选择问题的答案(或者甚至只是存储提醒问题和密码).

这些都不是那么安全,虽然我的应用程序中受保护的数据并不那么重要,所以我不是在寻找最强大的解决方案(只是一个不太难实现的体面解决方案,对于用户,并没有太大的黑客打破).

建议非常感谢.

谢谢,罗恩

iphone passwords ios

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

如何在不下载外部 URL 的情况下测试文件是否存在?

我想在不加载任何实际数据的情况下测试 URL 是否存在。

我正在考虑启动 NSURLConnection,然后使用这两个委托方法来检查状态:

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    // Connection failed ... presumably this is a server issue, and I don't know if the URL exists or not.
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    int status = [((NSHTTPURLResponse *)response) statusCode];
    [connection cancel];
    // Do something with the status
}
Run Code Online (Sandbox Code Playgroud)

这是一个明智的方式吗?我正在测试的文件可能非常大,因此我想确保不会下载实际文件。

谢谢,罗恩

ps 我正在考虑添加这个,因为苹果强制我的应用程序停止备份从互联网下载的文件。相反,我将文件存储在非备份空间中,并在备份数据库中跟踪文件的原始位置。由于该文件旨在成为用户库的永久部分,因此我想定期测试文件是否不可访问,然后将其移至备份空间(例如,这样它将在恢复到新设备时幸存下来) 。我对苹果公司强迫我做出这样的改变感到非常恼火,因为我可以想象客户会丢失重要数据。

pps 由于某些奇怪的原因,这些委托方法不再出现在 NSURLConnectionDelegate 协议的文档中。我假设文档只是搞砸了。

ios

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

deleteObject:如何在coreData中工作?

我只是冒险尝试在CoreData上重写我的应用程序(之前我使用的是自己的内部保存格式).

事情大多都在起作用,虽然我对deleteObject的行为有点困惑:

我有一个对象是我的图形的一部分,当我删除它时,对象似乎没有发生任何事情.该对象具有关系,其中一些是"级联",一些是"Nullify".与对象之间的每个关系都具有反比关系.

删除对象后,唯一似乎改变的是在我的对象上设置了"isDeleted"标志.所有关系都像以前一样存在.

如果我尝试使用NSFetchRequest查找对象,则它找不到已删除的对象.但是,如果我使用KVC关系遍历我的图形,则返回的NSSet包含所有对象,包括已删除的对象.

在我将save:方法发送到我的ManagedObjectContext后,一切都如我所料.

当我删除时,是否需要手动删除我不想要的关系,或者我是否需要不断保存以保持数据的正确性?这对我来说似乎非常直观.

有什么我可以做"提交"删除或至少使我的对象图表缺乏保存.每次我想要修改我的图表时,进行保存似乎有点激烈.

谢谢,罗恩

ps以下是一些对我来说很奇怪的行为:

在删除对象之前,这是父对象的"描述",它具有categoryObjs"to many"关系:

categoryObjs =     (
    "0x613e1a0 <x-coredata://1A1AE9E7-66B1-4F4D-A7AB-07D4504CAE2C/TestCategory/p9>",
    "0x613e1b0 <x-coredata://1A1AE9E7-66B1-4F4D-A7AB-07D4504CAE2C/TestCategory/p12>",
    "0x613e190 <x-coredata://1A1AE9E7-66B1-4F4D-A7AB-07D4504CAE2C/TestCategory/p7>"
);
Run Code Online (Sandbox Code Playgroud)

删除"p12"对象(上面的中间对象)后,通过KVC访问时关系的状态不会改变.如果我尝试获取TestCategory实体,则只找到两个实体.

在"保存:"之后,p12对象消失:

categoryObjs =     (
    "0x613e1a0 <x-coredata://1A1AE9E7-66B1-4F4D-A7AB-07D4504CAE2C/TestCategory/p9>",
    "0x613e190 <x-coredata://1A1AE9E7-66B1-4F4D-A7AB-07D4504CAE2C/TestCategory/p7>"
);
Run Code Online (Sandbox Code Playgroud)

iphone core-data ios

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

标签 统计

ios ×7

iphone ×5

core-data ×1

passwords ×1

unicode ×1