重入读/写locking结构?

我是一名经验丰富的.NET程序员,用iOS来伸展我的双腿。 在.NET中我最喜欢的multithreading构造是ReaderWriterLock 。 它允许多个读者或一个作家。 我真的在iOS中缺less的一个特点是锁是可重入的。 也就是说, 读者线程只要释放相同的次数就可以多次获取读锁 。 同样,只要单个写入器线程释放locking数量相同,就可以多次获取locking。 我研究过iOS框架,并没有一个构造似乎提供了相同的支持,包括重入性。 我也看了一下pthread库。 我发现了rwlock,但是它不允许重新进入。 iOS上有什么允许重入读写锁的东西?

为什么AppDelegate从UIResponderinheritance?

我注意到当在Xcode 4.2 beta 4中使用iPhone Master-Detail模板创build一个新项目时,它会: // AppDelegate.h @interface AppDelegate : UIResponder <UIApplicationDelegate> 为什么AppDelegate从UIResponder而不是NSObjectinheritance?

是NSURLIsExcludedFromBackupKeyrecursion

我在文档目录中有一个巨大的文件和目录树。 按照build议,我将使用NSURLIsExcludedFromBackupKey来阻止iTunes使用应用程序保存此数据。 我可以在我的根目录URL上使用它一次吗? [rootDirectoryURL setResourceValue:[NSNumber numberWithBool:YES] forKey:@"NSURLIsExcludedFromBackupKey" error:&error]; 或者我将不得不为每个文件调用它?

检测运行目标是应用程序扩展还是iOS应用程序

我有一个简单的应用程序,也有一个iOS 8的今天扩展(或小工具)。 我正在做的事情之一是在我的应用程序和我的小部件之间共享代码类,因为显然这使我不必拥有相同代码的多个副本。 这一切工作得很好,除了我有一个问题,其中一个API UIApplication sharedApplication提出了一个错误,因为你不能使用iOS 8的Widgets。 所以我在想的是有一个简单的if语句来检查最终目标是本地应用程序还是iOS 8窗口小部件,然后根据需要添加代码。 这会工作吗? 这是我的代码: if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) { CGSize ssz = sz; sz = CGSizeMake(ssz.height, ssz.width); } 如何更改此代码,以便可以执行下列操作之一: 只有运行/编译如果最终目标是本机iOS应用程序,而不是一个小部件。 或者检查该API是否在目标平台上可用,如果是,则使用它? 我希望我的问题对你的时间有意义和感谢,Dan。

如何获得UITableView的可见部分?

UITableView提供了方法indexPathsForVisibleRows和visibleCells ,但我怎样才能得到可见的部分?

iOS Safari 8input溢出滚动

我在移动Safari 8.1版本中遇到了一个问题。 这似乎是在手机上的所有版本的Safari 8的错误。 当你在input文本中input文本时,文本比input本身更长,光标在input时会一直向右移动 – 这是正确的。 问题在于,如果您select并尝试向左移动到隐藏的文本,则无法滚动。 同样,如果在input外部select,则不能向右滚动以查看隐藏的文本。 你唯一的select是全选和删除。 任何解决这个问题的方法? 我已经上传了不同inputtypes的示例页面,所有这些行为都存在。 小提琴: http : //jsfiddle.net/b7kmxaL6/ (访问移动Safari) <form action=""> <fieldset> <input type="text" class="text"> <input type="email" class="email"> <input type="password" class="password"> </fieldset> </form>

iOS 7的webview和localStorage持久性

我正在开发使用PhoneGap / Cordova的混合应用程序(仅适用于iOS和Android),并希望使用HTML5 localStorage来存储用于脱机访问的内容。 http://caniuse.com/#search=local存储说:“在iOS 5和6本地存储数据存储在一个位置,有时可能会被操作系统清除。” iOS 7(及更高版本)webview有什么情况,localStorage会在什么情况下持续存在,或被操作系统或用户清除? 将更新的应用程序清除localStorage? 怎么样的用户清除浏览器的Safari浏览器的历史logging – 也将适用于Web视图? 我是否需要担心(或者我可以控制)localStorage在fils系统上的创build位置。 我知道它不应该备份在iCloud上。 我有一个设备(iPad),并检查文件系统,我看到localStorage文件在应用程序沙箱内的〜/ Library / Caches中,请参阅下图。 从文档: https://developer.apple.com/icloud/documentation/data-storage/index.html可以再次下载或重新下载的数据应该存储在/ Library / Caches目录中。 您应该放入Caches目录中的文件示例包括数据库caching文件和可下载的内容,例如杂志,报纸和地图应用程序使用的文件。 我只是这样做,以设置数据: localStorage.setItem('foo','this is the FOO value'); localStorage.setItem('bar','and this is the BAR value');

如何在iOS中以recursion方式获取所有资源path?

我的应用程序包中有一个“解压缩”的文件夹。 我需要获取txttypes的所有文件的资源path。 我一直在使用这个, NSArray *filePaths = [NSBundle pathsForResourcesOfType:@"txt" inDirectory:[[[NSBundle mainBundle] bundlePath] stringByAppendingString:@"/unzipped"]]; 但是它只能获取第一个目录中的文件。 有没有这个我刚刚失踪的地方的recursion版本?

以编程方式更改UITextField的占位符文本颜色

我有一个占位符的UITextField 。 当用户想要提交表单并且他/她没有在文本框中input任何内容时,我想让占位符的文字颜色变成红色。 这是我的问题: 这是否会违反苹果的用户界面指南? 我不希望我的应用因为这么小的细节而被拒绝。 我该怎么做呢? 我知道我可以覆盖方法drawPlaceholderInRect:在UITextField的子类。 但是,如果我这样做,文本将永远是红色的,正如我以前写的,我希望它成为红色取决于用户定义的行动。 我能想到的唯一解决scheme是为我的UITextField (占位符的文本)使用“默认”文本,只要用户没有input任何内容,并在我需要时显示为红色,就以浅灰色显示。 换句话说,我只是嘲笑占位符的行为。 但是,当然,这不是很优雅。 有任何想法吗?

有什么办法可以检测iOS 6上的漫游状态吗?

我的应用程序使用下面的方法来检测在iOS 4和5漫游。 NSString *carrierPListSymLinkPath = @"/var/mobile/Library/Preferences/com.apple.carrier.plist"; NSString *operatorPListSymLinkPath = @"/var/mobile/Library/Preferences/com.apple.operator.plist"; NSFileManager *fm = [NSFileManager defaultManager]; NSError *error = nil; NSString *carrierPListPath = [fm destinationOfSymbolicLinkAtPath:carrierPListSymLinkPath error:&error]; NSString *operatorPListPath = [fm destinationOfSymbolicLinkAtPath:operatorPListSymLinkPath error:&error]; return (![operatorPListPath isEqualToString:carrierPListPath]); 但是这个代码总是在iOS6上返回false(即使我不是漫游,它总是返回false),我想这可能是由苹果公司更改的plist文件位置,任何人都面临同样的问题,任何人都可以帮助我吗? 谢谢。