小编ban*_*isa的帖子

iOS核心数据架构提示需要

我只是想了解构建我的第一个Core Data应用程序的最佳方法,以及我将需要的主要对象和交互.

数据远程存储,我需要通过HTTP访问它,它将以JSON格式响应.我想使用Core Data在设备上缓存它.每天服务器上都会有新数据,因此我需要访问它并相应地更新模型.

是否有任何SDK类可以用来帮助我解决这个问题,或者我会手动推出它?

我想我正在看一个模型控制器,我调用它来获取数据,它将返回核心数据缓存数据,并可能对Web服务进行后台调用以获取最新数据,然后通知视图有新的数据.当我以JSON格式从Web服务获取数据时 - 我需要将此映射到ManagedObjects,这是对我的核心数据上下文的添加.

architecture iphone core-data objective-c ios

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

@autoreleasepool语义

我在llvm网站上阅读ARC文档:http://clang.llvm.org/docs/AutomaticReferenceCounting.html#autoreleasepool

..尤其是@autoreleasepool.

在使用NSAutoreleasePool的许多当前实现中,我看到在循环迭代期间池被定期耗尽的情况 - 我们如何使用@autorelease池执行相同的操作,或者是否已经在某种程度上为我们完成了这些操作?

其次,文档说明如果抛出异常,池就不会耗尽......好的例外是名称异常,但是如果它们确实发生了,你可能希望在不泄漏大量内存的情况下恢复.文档未指定何时释放这些对象.

任何人都有关于这些点的任何信息?

objective-c llvm automatic-ref-counting

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

停止自动调用ios5生命周期事件

我的所有视图控制器都扩展了我自己的BaseViewController:UIViewController,在这里我已经被覆盖了

- (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers {
    return NO;
}
Run Code Online (Sandbox Code Playgroud)

但是,iOS 5模拟器决定忽略这一点并继续在我的嵌套UIViewController层次结构上调用我的viewWillAppear等方法.

我在另一个项目中做了同样的事情并且运行良好.是否还有其他东西让我听到它?

objective-c uiviewcontroller ios ios5

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

在NSOperation中使用NSThread睡眠

使用一些代码,我遇到了运行循环,我是新手,在NSOperations 里面.

他们NSOperation正在忙于下载数据 - 当他们忙碌时,会有代码等待下载完成,以NSRunLoops和线程休眠的形式.

我特别感兴趣的是这段代码:

while (aCertainConditionIsTrue && [self isCancelled]==NO) {
     if(![[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:1.0]]){
        [NSThread sleepForTimeInterval:1.0];
     }
}
Run Code Online (Sandbox Code Playgroud)

我已经阅读了关于运行循环的信息,runMode:beforeDate:并将等待输入源或超时.虽然我不是百分之百的东西.

在第一次执行时,它总是返回NO并命中sleepForTimeInterval:.这不好吗?

在一个特定的实用程序类中,它经常会sleepForTimeInterval:遇到很多 - 每个线程一次 - 这会严重损害性能.

对此有什么更好的解决方案或建议吗?

objective-c nsoperation grand-central-dispatch nsrunloop ios

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

我的堆栈痕迹消失了吗?

我不知道我做了什么,这是多长时间(因为我已经忍受了一段时间)...但我在Xcode的调试器中丢失了我的堆栈跟踪...有点.下面是我的应用程序崩溃时看到的屏幕截图:

在此输入图像描述

在控制台中我看到了这个:

在此输入图像描述

所以我可以弄清楚控制台出了什么问题,但我错过了我可以点击类文件并跳转到崩溃源的堆栈跟踪.

它可能是LLDB吗?最新的Xcode?还有什么东西吞噬了我的异常?有任何想法吗?

xcode exception stack-trace ios

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

dispatch_async和[NSURLConnection sendSynchronousRequest]

围绕这个主题存在各种各样的问题,并且许多建议说不要在dispatch_async中使用sendSynchronousRequest,因为它会阻塞线程,并且GCD将产生许多新的工作线程来为所有同步URL请求提供服务.

似乎没有人对iOS 5,[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]在幕后做什么有明确的答案.

我读过的一篇文章指出它可能"优化",并且"可能"使用运行循环 - 但肯定不会为每个请求创建一个新线程.

当我在使用sendAsynchronousRequest:queue:completionHandler时暂停我的调试器时,堆栈跟踪如下所示:

截图

..现在看来sendAsynchronousRequest:queue:completionHandler实际上正在调用sendSynchronousRequest,当我使用async方法而不是sync方法时,我仍然创建了大量的线程.

是的,使用异步调用还有其他好处,我不想在这篇文章中讨论.

所有我感兴趣的是性能/线程/系统使用,如果我更糟糕的是在dispatch_async中使用同步调用而不是使用异步调用.

我也不需要使用ios4异步调用的建议,这纯粹是出于教育目的.

有没有人对此有任何有见地的答案?

谢谢

nsurlconnection grand-central-dispatch ios

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

什么是OR EQUAL

dataUpdated |= [backgroundApplicationData downloadLinks];
Run Code Online (Sandbox Code Playgroud)

这个Or/Equal是什么意思?从未见过它.

c objective-c

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

从完成块中保护我的代码免受僵尸的攻击

我熟悉委托模式和nilling我的委托,特别是在我的视图控制器消失时仍在进行的异步调用时.我没有委托,并且回调成功返回nil对象.

我现在正在尝试使用完成块来使我的代码更容易阅读.

我从视图控制器调用网络服务,并传递一个更新我的UITableView的块.在正常情况下它工作正常.但是,如果我在视图完成之前离开视图,则执行完成处理程序块 - 但是UITableView现在是一个僵尸.

什么是处理这个的通常模式?

更新代码示例

这是一个iPad应用程序,我在屏幕上同时有两个视图控制器,就像拆分视图一样.一个是细节,另一个是图像网格.我点击一个图像,它告诉细节加载信息.但是,如果我在他们有机会进行网络通话之前点击图像太快 - 我有问题.在更改图像时,会调用下面的代码来计算图像的最爱....

所以这就是我的困境,如果我使用下面的代码 - 它工作正常,但如果你在网络响应之前切换图像,它会在仪器中泄漏.

如果我删除__block并传入self,那么它会与僵尸一起崩溃.

我无法获胜......我确信我错过了使用积木的基本原则.

__block UITableView *theTable = [self.table retain];
__block IndexedDictionary *tableData = [self.descriptionKeyValues retain];
FavouritesController *favourites = [Container controllerWithClass:FavouritesController.class];
[favourites countFavouritesForPhoto:self.photo 
                         completion:^(int favesCount) {

                             [tableData insertObject:[NSString stringWithFormat:@"%i", favesCount]   
                                              forKey:@"Favourites:" atIndex:1];                 
                             [theTable reloadData];

                             [tableData release];
                             [theTable release];
                         }];
Run Code Online (Sandbox Code Playgroud)

有小费吗?谢谢

第二次更新

我改变了加载收藏夹的方式.我不是将收藏夹作为单身人物,而是在每次照片更改时创建一个实例.通过替换它并杀死旧的 - 块无处回调(我猜它甚至不存在),我的代码现在看起来像下面的,它似乎工作:

[self.favourites countFavouritesForPhoto:self.photo 
                         completion:^(int favesCount) {      
                             [self.descriptionKeyValues insertObject:[NSString stringWithFormat:@"%i", favesCount]   
                                              forKey:@"Favourites:" atIndex:1];                 
                             [self.table reloadData];
                         }];
Run Code Online (Sandbox Code Playgroud)

它不会泄漏,也不会崩溃.

objective-c grand-central-dispatch ios objective-c-blocks

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

底部布局指南改变

当我启动我的应用程序时,底部布局指南具有这些尺寸;

<_UILayoutGuide:0xd687730; frame =(0 519; 0 49); hidden = YES; layer =>

这是正确的,因为我的标签栏有一个不透明的自定义背景.视图控制器的内容是表视图.

但是,当我转到下一个标签并返回时,底部布局已更改:

<_UILayoutGuide:0xd687730; frame =(0 568; 0 0); hidden = YES; layer =>

是什么改变了这个以及为什么?请给我任何线索.

ios autolayout

5
推荐指数
0
解决办法
405
查看次数

推断为具有类型'AnyClass',这可能是意外的

这是我的代码:

if let runningTests = NSClassFromString("XCTestCase") {
    return false
}
Run Code Online (Sandbox Code Playgroud)

编译器警告:

"常量'runningTests'被推断为具有'AnyClass'类型,这可能是意料之外的.

我需要强制转换为删除此警告而不将我的代码更改为if!= nil检查NSClassFromString的结果是什么?

swift

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