[英]Is there any way to override a setter property in extending class in Kotlin
[英]iOS Objective C Override Property Setter
在課堂上,我有@property BOOL clearCookies;
我想進行設置,以便在設置項目時可以做一些其他事情。
在我的代碼中,我可以做類似classInstance.clearCookies = YES;
然后在setter方法中,類似於android中的以下Java示例:
public void setClearCookies(boolean clearCookies) {
_instance.clearCookies = clearCookies;
_instance.doOtherThings();
}
在目標C中實現此目標的最佳方法是什么? 基本上,我想設置boolean屬性,然后再做一些其他事情(實際上是從UIWebView
清除cookie)
您可以這樣:
-(void)setClearCookies:(BOOL)clearCookies {
_clearCookies = clearCookies;
[self doOtherThings];
}
-(void)setClearCookies:(BOOL)clearCookies
{
@synchronized(self)
{
_clearCookies = clearCookies;
[self doOtherThings];
}
}
- (BOOL)clearCookies
{
@synchronized (self)
{
return _clearCookies;
}
}
避免線程沖突的另一種方法( @synchronized()
替代方法)是使用Grand Central Dispatch(在大多數情況下,它比前者快 ):
@property (assign, nonatomic) BOOL clearCookies;
// Later in code
static dispatch_queue_t clearCookiesQueue;
- (void)setClearCookies:(BOOL)clearCookies {
[self initializeClearCookiesQueue];
dispatch_async(clearCookiesQueue, ^{ // Note, this is "async"
_clearCookies = clearCookies;
});
}
- (BOOL)clearCookies {
[self initializeClearCookiesQueue];
__block BOOL clearCookies;
dispatch_sync(clearCookiesQueue, ^{ // Note, this is "sync"
clearCookies = _clearCookies;
});
// As "sync" waits until the operation is finished, you can define
// your other operations here safely.
[self doOtherStuff];
return clearCookies;
}
/**
Checks if the queue for the clearCookies property is initialized and,
if it's not, initializes it.
*/
- (void)initializeClearCookiesQueue {
if ( ! clearCookiesQueue ) {
// We'll use a serial queue to avoid conflicts reading/writing the ivar
clearCookiesQueue = dispatch_queue_create("com.yourapp.yourviewcontroller.someUniqueIdentifier", DISPATCH_QUEUE_SERIAL); // Note, this is a C string, not NSString
}
}
如果您不關心線程,或者不需要線程,那么只需覆蓋您的setter就可以了:
- (void)setClearCookies:(BOOL)clearCookies {
_clearCookies = clearCookies;
[self doOtherStuff];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.