2016-05-17 48 views
1

有時我需要在ObjC中實現proxy pattern。我需要它的情況下,我創建了內部主題在運行時,並不想從代理移動創建邏輯。有時我使用代理內的幾個對象,我更喜歡使用ARC來記憶menegment。現在我使用C++實現它:如何在Objective-c中實現代理模式(使用運行時和其他objc功能)

- (void)setProperty:(CGFloat)value 
{ 
    _innerObject.value = value; 
} 


- (CGFloat)property 
{ 
    return _innerObject.value; 
} 

<...> 

我認爲這不是一個最好的方法,我認爲存在更簡單的方法。我想使用ObjC運行時並自動轉發消息。
我怎樣才能做到這一點,而不用手寫每一組/每個方法?

+0

你的類是'NSProxy'的子類嗎? – Willeke

+0

不,我的課程是NSObject,但我可以使用NSProxy,我從未使用過它。 –

回答

0

- forwardingTargetForSelector:「[r]影響無法識別的消息應該首先指向的對象」。所以:

// Will be queried for every message that is sent to `self` but 
// which `self` does not itself implement. 
- (id)forwardingTargetForSelector:(SEL)selector 
{ 
    return _innerObject; 
} 
+0

據我所知,我必須將此方法添加到我的課程並刪除我的實施。我對嗎?我應該如何實現屬性?可能是我應該使用動態? –

+0

對不起,回覆較慢:是的。還有一個'-forwardInvocation:'這將允許你捕獲提供給你的代理的消息的全部內容,以防你想稍後而不是現在分派它們,但是它比'-forwardingTargetForSelector:'更慢。 – Tommy

相關問題