2011-12-30 75 views
2

如果*空指針指向測試以NSObject的我想知道女巫是最好的實踐來檢驗,如果空指針實際上是一個客觀的C對象指針(NSObject的*)...如何在目標C

- (id)initWithExecPath:(NSString*)executePath withArgs:(NSArray*)args identifier:(NSString*)identifierString contextInfo:(void*)contextInfo { 

// I would like to check here if contextInfo is an NSObject 

} 

謝謝...

回答

2

退房此帖來自CocoaWithLove網站:

在這篇文章中,我看看測試的方法,如果任意 指針指向一個有效的Objective- C ob JECT。 的測試結果不是絕對準確的,如果指針不是有效的內存位置,它可能會干擾gdb 調試,所以這不是 你經常要做的事情(當然不是在生產 代碼中) 。但它可以是一個方便的調試工具,當你在你沒有分配的內存中盲目地盯着 。

+0

應該是http://cocoawithlove.com/2010/10/testing-if-arbitrary-pointer-is-valid.html – nielsbot 2011-12-30 08:13:50

+1

謝謝你的帖子,已經檢查過,想知道是否有一個更簡單的方法。 – Vassilis 2011-12-30 08:17:11

0

答案是,您不能提供「是一個Objective-C對象」的通用測試。任何這樣的測試都必須檢查對象的內部結構,因此根據定義是脆弱的。還有可能會傳遞一段隨機的內存,看起來像一個Objective-C對象,但不是。例如一個最近釋放的對象。

0

沒有可靠的方法來確定這一點。此外,任何接受上下文指針的API都不應該關心它是什麼或指向什麼,除了將它作爲上下文傳回調用方之外,它不應該對它做任何事情。

也許你問的是錯誤的問題;一旦你知道它是一個NSObject,你到底想做什麼?

+0

xmm,我同意但是......以及這個方法正在初始化一個NSThread。當我傳遞一個contextInfo指針時,如何確保它指向的對象在NSThread完成執行時仍然存在(未釋放)? (NSThread正在調用一個委託方法來通知它已完成傳遞contextInfo的委託)。所以我想保留它,如果它是一個NSObject - 請注意,它可以只是一個* int或* char。當然,我可以在這個方法中使用2個參數(id和* void)。只是尋找替代品等:)。謝謝! – Vassilis 2011-12-30 11:12:57