我聲明瞭一個類擴展接口,它添加了變量。是否可以訪問該類別中的那些變量?在類別類中使用ObjC類擴展的變量
回答
當然 - 任何變量是通過運行時可以訪問,即使是不可見的@interface
:
SomeClass.h
@interface SomeClass : NSObject {
int integerIvar;
}
// methods
@end
SomeClass.m
@interface SomeClass() {
id idVar;
}
@end
@implementation SomeClass
// methods
@end
SomeClass + Category.m
@implementation SomeClass(Category)
-(void) doSomething {
// notice that we use KVC here, instead of trying to get the ivar ourselves.
// This has the advantage of auto-boxing the result, at the cost of some performance.
// If you'd like to be able to use regex for the query, you should check out this answer:
// http://stackoverflow.com/a/12047015/427309
static NSString *varName = @"idVar"; // change this to the name of the variable you need
id theIvar = [self valueForKey:varName];
// if you want to set the ivar, then do this:
[self setValue:theIvar forKey:varName];
}
@end
您也可以使用KVC得到了UIKit框架或類似的高德班,同時更易於比純運行時,黑客使用。
這就是我得到的結果:[
@ user732274顯然你只能在知道該類有一個名爲'idVar'的變量時才能使用它。在你的情況下,用你需要的變量替換它。 –
我把它命名爲idVar(並且我得到那個錯誤) – user732274
- 1. 實例變量的類別擴展
- 2. 使用類別擴展iTunesApplication類
- 3. 擴展類(PHP)的變量
- 4. 如何在擴展類公共變量中使用變量
- 5. 經由方法類擴展類類別
- 6. 在PHP擴展靜態類 - 避免了多個類別的共享變量擴展類
- 7. 擴展類和使用類的父類
- 8. 在Java的子類中使用父變量的擴展版
- 9. 使用Java在擴展類中不共享的變量
- 10. 在PHP的擴展類中使用父變量
- 11. 在擴展類中使用父變量的問題
- 12. 用變量擴展一個類?
- 13. ObjC使用塊中的變量在另一個類中觸發
- 14. 具有擴展應用程序類別的全局變量
- 15. 如何訪問從父類擴展的子類中的變量
- 16. PHP在擴展類中使用外部變量
- 17. 來自擴展類的PHP變量
- 18. 類擴展類與類類
- 19. 如何從擴展類中獲取變量到其父類中
- 20. 訪問ObjC類別中的靜態變量
- 21. 使用擴展方法的擴展類
- 22. 同一頭文件中的類和類擴展(類別)
- 23. 擴展使用類別具有相同方法的類名
- 24. 類別變量
- 25. PHP使用擴展類中的父變量
- 26. 訪問變量從另一個類,擴展活動的類擴展視圖
- 27. 類擴展中聲明的變量和實現類中的變量之間有什麼區別
- 28. 擴展PHP類不接受變量
- 29. 只得到擴展分類變量
- 30. 從類擴展訪問會話變量
如果類別是在擴展名相同的編譯單元中聲明的,並且該變量是'public',則應該可以訪問它,但我不確定。你試過了嗎? – dasblinkenlight
...是「公開」一個ObjC關鍵字? – user732274
@ user732274關鍵字'@ public'是,但它實際上只是一個編譯器提示。任何對象都可以隨時從本身獲取任何實例變量,因爲objc是純粹動態的語言。 –