小编Nat*_*kin的帖子

iOS内存使用量增加,找不到罪魁祸首

我正在尝试使用AFNetworking 2.5下载大量图像并将它们传输到磁盘.根据Xcode中的内存监视器,这会导致无限制的内存增长(最终导致内存警告和强制退出) - 但使用分配工具分析内存使用情况会显示内存使用情况稳定.

我想在这里认为Xcode是错的,但为什么我的应用程序会被iOS杀死?

仪器显示这一点 - 峰值是核心数据查询,其余是图像下载 - 峰值约9.5MB,其余约8.5MB

仪器

我也尝试了快照分析 - 它显示了一点点增长,但远不及Xcode报告的数量

快照分析

Xcode的内存监视器显示了这一点 - 每次迭代增加了多个MB.

Xcode内存使用情况

有没有办法让仪器向我展示Xcode看到的东西?或者有没有更好的工具来找出所有这些记忆的去向?

谢谢!

xcode instruments ios afnetworking

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

使用WKHTTPCookieStore删除cookie

我正在使用新WKHTTPCookieStore类,以便WKWebViews在应用程序中注入和删除cookie .

所有WKWebViews共享都是共同的,WKWebViewConfiguration以便他们可以共享一个共同的cookie商店.

使用该add()方法注入cookie工作正常,每个Web视图都可以看到新的cookie并发送它们的请求.删除cookie似乎是一个问题 - 网络视图仍然看到所谓的已删除的cookie,并继续发送每个请求:

let cookieStore = self.webkitConfiguration.websiteDataStore.httpCookieStore
cookieStore.getAllCookies { (cookies) in
    for cookie:HTTPCookie in cookies {
        if cookie.name == "CookieIWantToDelete" {
            cookieStore.delete(cookie, completionHandler: {
                self.webView.reload() //Deleted cookie is still sent with this request
            })
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以通过废弃所有的饼干来解决它WKWebsiteDataStore,但它似乎有点矫枉过正.

有任何想法吗?

cocoa-touch webkit ios swift

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

核心数据同步 - 跟踪已删除的对象

我正在为我正在开发的iPad应用程序设置基本同步服务.目标是在iPad应用程序的多个实例中保持数据一致,并在Web上拥有只读版本的数据,从而推出自定义解决方案.

目前的流程如下:

  • 每个实体都有一个"已创建","已修改"和"UUID"字段,这些字段由Core Data自动更新
  • 在同步时,在最后一个同步日期之后具有创建或修改日期的每个实体被序列化为JSON并发送到服务器
  • 服务器持续使用客户端生成的UUID作为的PK到MySQL数据库的任何更改(如果有冲突,它只是使用最近修改的实体为"真"版本,没有什么花哨存在),并发送回任何更新的实体的客户
  • 然后,客户端将这些更改合并回其Core Data DB

这一切似乎都很好.我的问题是如何使用此方法跟踪已删除的对象?我猜我可以为每个实体添加一个'已删除'标志,并在客户端删除某些内容时设置此标志,然后我可以将该更改推送到服务器并使用其余的同步数据.同步完成后,客户端实际上可以删除这些实体.我的问题是:

  • 我可以覆盖Core Data的删除方法来自动设置此标志吗?
  • 这是否需要在服务器上无限期地保留所有已删除的实体?我们无法知道每个客户端何时同步并实际删除了每个实体(我目前没有跟踪客户端实例)
  • 有没有更好的方法呢?

mysql iphone core-data ipad ios

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

Laravel Lighthouse - 按关系的属性对查询进行排序

使用如下所示的模式,是否有一种方法可以执行查询并按实体name的属性对结果进行排序JobType?我想要一个分页的作业列表,并按作业类型名称的字母顺序显示结果。

extend type Query @middleware(checks: ["auth:api"]) {
    jobs(orderBy: _ @orderBy): [Job!]! @paginate(defaultCount: 10, model: "App\\Job")
}

type Job {
    id: ID!
    description: String!
    job_type: JobType! @belongsTo
}

type JobType {
    id: ID!
    name: String!
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用该@builder指令,然后在构建器中使用联接以这种方式引入名称属性,但这似乎会导致实体 ID 出现一些问题,从而导致关系链接到错误的事物。

有任何想法吗?

php laravel graphql laravel-lighthouse

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

多线程核心数据导致UI挂起

我正在尝试在我的应用程序的后台对相当大的数据集(~60000行)执行获取.尽管使用了单独的线程,但每当执行获取时,UI都会显着挂起一秒钟.我的方法是否正确?

- (id)init
{
    if(self = [super init])
    {
        ABAppDelegate *appDelegate = (ABAppDelegate *)[[UIApplication sharedApplication] delegate];
        _rootManagedObjectContext = appDelegate.managedObjectContext;

        _backgroundContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
        [_backgroundContext setPersistentStoreCoordinator:_rootManagedObjectContext.persistentStoreCoordinator];
    }
    return self;
}


- (void)fetch {
    [_backgroundContext performBlock:^{
        NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"ItemPhoto"];
        NSPredicate *pred = [NSPredicate predicateWithFormat:@"full_uploaded_to_server == 0 OR thumb_uploaded_to_server == 0"];
        fetchRequest.predicate = pred;
        NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"modified" ascending:YES]; //Start at the back of the queue
        fetchRequest.sortDescriptors = [NSArray arrayWithObject:sort];
        fetchRequest.fetchBatchSize = 1;
        fetchRequest.fetchLimit = 1;

        NSError *error;
        NSArray …
Run Code Online (Sandbox Code Playgroud)

multithreading core-data ios

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