首頁>Program>source

是否可以跟蹤我的Objective-C物件的分配和釋放? 例如,如果我有一个Book類,我想跟蹤Book型別物件的所有分配和取消分配.我可以跟蹤所有預設的SKD類,例如UIViewController,UIwindow,UIView,NSDictionary等,但是我也想跟蹤从定義的類建立的物件。

最新回復
  • 5月前
    1 #

    分配工具可跟蹤物件的生命週期.如果您使用"分配"模板,則將其配置為記錄 mallocfree 事件.您可能需要配置它以同時記錄 retainreleaseautorelease 通過在分配工具設置中打開"記錄參考計數"複選框来記錄事件:

    (您無法在Instruments錄製時切換此選項,預設情况下,它会在您選擇模板後立即開始。)

    Update for Xcode 9: 苹果使找到這些設置變得更加困难.現在您需要選擇分配工具,然後从選單欄中選擇"檔案">"記錄選項"。

    執行後,您可以使用"分配">"統計資訊">"物件摘要"视圖找到物件,這是"详细資訊"窗格(視窗的下半部分)的預設設置:

    如果要查看在停止執行之前已被重新分配的物件,則需要將"分配寿命"設置从"已建立並仍然存在"(預設)更改為"已建立所有物件":

    要查詢特定類的物件,請先在視窗工具欄右端的"搜尋"欄位中键入類名稱.然後,在列表视圖的"類別"列中找到類名稱,將滑鼠悬停在其上,然後單击旁邊的箭頭.例如,我的應用程式有一个名為 Tile的類 ,因此我进行了搜尋,然後單击 Tile旁邊的箭頭 在列表视圖中:

    現在,列表视圖顯示 Tile的每个例項 . (請註意,您必须輸入物件的實際類,而不是超類。輸入 NSObject 只会找到由 [NSObject alloc]建立的物件 ,而不是 [Tile alloc]建立的物件 .)通過單击该例項地址旁邊的箭頭,我可以查看任何特定例項的歷史記錄:

    在物件的详细视圖中,我可以看到 mallocfree 事件,由於我打開了"記錄參考計數",因此我也可以看到 retainreleaseautorelease 訊息及其對物件保留計數的影响.如果要查看任何這些事件的呼叫堆棧,可以打開視窗右侧的擴充套件详细資訊面板:

  • sql server:多列的唯一約束
  • sockets:我是否需要心跳以保持TCP連線打開?