CoreData分配 - “调试内存图”和“仪器”报告

时间:2017-05-10 11:17:30

标签: ios xcode core-data profiling instruments

TL;博士

在创建和获取Core Data对象时,Debug Memory GraphInstruments中存在一些相互矛盾且有些混乱的内存分配报告。

环境:

Xcode 8 Swift 3 iOS 10

应用设置:

(看一下/克隆自:https://github.com/sovata8/TestingCoreDataAllocations/

我有以下简单的应用设置。

  • 具有一个实体的核心数据模型 - Book(自动生成NSManagedObject子类,其名称与Xcode的默认行为相同。)
  • 两个按钮 - create booklist all books可以满足您的期望。

App Run步骤A:

  1. 运行应用
  2. create book一次。
  3. Debug Memory Graph(新的Xcode 8功能,记得完成检查后,按'"继续执行程序")
  4. 书(1)
    Book_Book_(1)

    (括号中的内容是实例数)

    1. 再按create book两次。
    2. Debug Memory Graph
    3. 书(1)
      Book_Book_(3)

      观察:

      Debug Memory Graph上下文中,Book_Book_指的是我们实际的Book类的实例,而Book指的是其他内容的实例,而且它不是&#39 ;当创造更多书籍时增加。所以它可能指的是像实体描述或某种“蓝图”这样的东西。或者'对象工厂'。

      App Run步骤B:

      1. 运行应用
      2. create book三次。
      3. Debug Memory Graph
      4. 书(1)
        Book_Book_(3)

        1. list all books一次
        2. Debug Memory Graph
        3. 书(6)
          Book_Book_(3)

          观察:

          Debug Memory Graph > Book从1增加到6。

          1. list all books以上(一次或多次)

          2. Debug Memory Graph

          3. 没有变化

            乐器app:

            我重新做了App Run Steps AB,但这次不是查看Debug Memory Graph,而是使用Instruments应用(Xcode>产品&gt ;配置文件)与Allocations分析模板(显示All Heap & Anonymous VM)。我正在调查Details > Statistics > Allocation Summary > # Total,在过滤器中我将单词Book

            使用App Run Steps A我看到了与使用Debug Memory Graph时相同的内容。 (Book - 1,Book_Book - 3) 使用App Run Steps B,按list all books并未改变任何内容。所有分配计数保持不变(Book - 1,Book_Book - 3)。

            观察:

            Debug Memory GraphBook应用1中按下6时,list all books显示InstrumentsBook增加到1 } Debug Memory Graph > Book

            问题:

            • 这个Debug Memory Graph是指什么?它是否与核心数据的一些新功能有关(WWDC 2016谈到"查询生成和#34;例如)
            • 为什么InstrumentsResponsible Caller显示不同的内容?哪一个是正确的?
            其他可能相关的观察:
            • instruments app会显示Book为:

              • 适用于PFPlaceHolderSingleton - Book_Book_
              • 适用于PFAllocateObject - <div id="searchContainer"> <input [(ngModel)]="search" (ngModelChange)="filterSearch()" (focus)="showSearchList=true;" (blur)="showSearchList=false" type="text" id="searchJobs" placeholder=" Search"/> <div *ngIf="showSearchList" id="searchDropdown"> <p *ngFor="let result of filteredSearchResults; let index = index;" (click)="addResultToResults(index); search='';"> {{result}} </p> </div> </div>
            • 有时人们会报告Instruments和Xcode之间的差异,原因是Xcode Run操作使用Debug配置,而Instruments使用Release配置。我尝试使用Debug或两者都是Release,结果与上面描述的相同。

0 个答案:

没有答案