2011-09-29 60 views
1

我在多個UIPasteboard對象中看到很多泄漏。直到今天,我從來沒有聽說過這個班,(顯然)也沒有在課程中使用過自己。下面是截圖:UIPasteboard對象泄漏

Instruments Screenshot

我能做些什麼來擺脫這些泄漏的?我甚至正確地看待這個問題?

+0

我不知道如何自己做這件事,但我相信有這樣的指導來幫助解決這個問題。這是你想要的嗎? http://www.raywenderlich.com/2696/how-to-debug-memory-leaks-with-xcode-and-instruments-tutorial –

+0

您可以做的第一件事就是粘貼您使用的關於pasteboars的代碼,這樣我們就可以看看它是如何泄漏的。 – Zigglzworth

+0

@Zigglzworth:正如我在問題中提到的,我沒有在代碼中使用粘貼板,所以我真的不知道該粘貼什麼。 – Ravi

回答

0

確保在任何第三方代碼中檢查問題是否是UIPasteBoard實例。

+0

我在OpenUDID庫中的UIPasteboard類中有一串泄漏對象。希望這會得到解決! – Ravi

0

沒有堆棧跟蹤,你不能做很多。

UIPasteboard用於執行復制&粘貼。在桌面上,它也用於拖動&。除了這兩個任務之外,我不太確定其他人通常使用它,但它是在應用程序之間發送數據片段的一種方式(假設兩個應用程序都知道要查看粘貼板)。

+0

我的代碼不執行任何複製/粘貼操作。還有什麼想法? – Ravi

+0

@Ravi:找出爲什麼你沒有在儀器中獲得堆棧跟蹤。您可能需要打開malloc堆棧日誌記錄。 –

+0

我已更新圖像以反映堆棧跟蹤。有什麼想法嗎?我現在很確定它來自OpenUDID。這裏是代碼:https://github.com/ylechelle/OpenUDID/blob/master/OpenUDID.m – Ravi

-1

如果這不是您設置的應用程序粘貼板而不是系統粘貼板,那麼您需要訪問generalPasteBoard,而不是獲取其所有項目以及這些項目的所有類型,並將其字符串和數據值設置爲零。

generalpasteboard UIPasteBoard *pb = [UIPasteboard pasteBoardWithName:UIPasteboardNameGeneral]; 
for (UIPasteBoardItem *pbItem in [pb items]) { 

     for (NSString pbType in [pbItem pasteboardTypes]) { 
     [pbItem setData:nil forPasteboardType:pbType]; 
     [pbItem setValue:nil forPasteboardType:pbType]; 
     } 
} 

嘗試把這個在你的應用程序的開始....仍然是其奇怪的是,一般的紙板泄漏...順便說一下,也可能是查找紙板UIPasteboardNameFind(也是系統紙板)

請注意,這是爲了找出它是不是在最終的分佈式應用程序中使用的通用粘貼板。此外,請確保在使用的任何第三方代碼中檢查問題是否是UIPastBoard實例。

+2

哇,這聽起來像一個*糟糕*想法。在沒有任何內容的情況下添加UIPasteboard訪問權限,並完全吹走用戶的剪貼板,絕對沒有預期的收益。拉維,請不要這樣做。 –

+0

@Kevin:這不是在實際的應用程序中使用。它用於查明泄漏是否由通用紙板引起。 – Zigglzworth