2010-06-14 45 views
1

像這樣的代碼(可能)是否違反iPhone開發人員許可協議?Objective-C運行時反射(objc_msgSend):它違反iPhone開發人員許可協議嗎?

Class clazz = NSClassFromString(@"WNEntity"); 
id entity = [clazz entityWithImage:@"Icon.png"]; 
SEL setPositionSelector = NSSelectorFromString(@"setPosition:"); 
objc_msgSend(entity, setPositionSelector, CGPointMake(200, 100)); 

我正在處理從XML動態分配類並通過objc_msgSend調用它們的方法的代碼。這只是非常方便地構造我的對象,但它令我擔心,因爲我不知道這是好的還是違反許可證,通過動態執行代碼或甚至調用私有(?)API函數。如果他們是私人的,他們不會被記錄在案,對嗎?

有人可以對此有所瞭解嗎?你有沒有使用類似上面的代碼批准或拒絕的應用程序?

我敢肯定,這是好的,但我不想聽到別人的聲音! :)

+4

我投票結束這個問題作爲題外話題,因爲它涉及許可和法律問題,而不是編程或軟件開發。 [見這裏](http://meta.stackoverflow.com/a/274964/1402846)瞭解更多信息,以及[幫助/話題]。 – Pang 2015-06-09 01:13:31

回答

1

如果您要調用的方法記錄在案,則表明您沒有違反該協議。使用objc_msgSend()並沒有什麼錯,因爲這些「反射」函數被完整記錄。

1

您需要使用類似的結構才能支持不同版本的iOS(或適用於iPhone和iPad的「通用」應用程序),因此應該沒問題。

有一點,雖然:我不確定你需要直接使用objc_msgSend。你能不能使用performSelector:withObject:afterDelay:或其他類似的方法NSObject

+0

objc_msgSend似乎更容易,因爲我需要傳遞的參數大多是float和CGPoint,而不是對象。使用performSelector或NSInvocation有什麼好處嗎? – LearnCocos2D 2010-06-14 11:07:28

+0

@GamingHorror我的一般規則是堅持更高層次的構造,除非有充分的理由不這樣做。我認爲通過標量將被認爲是直接進入'objc_msgSend'的一個很好的理由。 – 2010-06-14 11:24:59

+0

我做了一些研究,並瞭解到,當你將float作爲參數或接收結構作爲返回值時,objc_msgSend會有問題,所以我將使用NSInvocation來避免這些問題。它更詳細,但確實清潔API明智。 – LearnCocos2D 2010-06-14 13:52:39

相關問題