[英]ObjectC-Why can't I get the properties correctly using the class_copyPropertyList function?
[英]Understanding Class in ObjectC
在objc.h中,有Class的定義
typedef struct objc_class *Class;
typedef struct objc_object {
Class isa;
} *id;
案例:在NSObject中使用Class:
/*************** Basic protocols ***************/
@protocol NSObject
- (BOOL)isEqual:(id)object;
- (NSUInteger)hash;
- (Class)superclass;
- (Class)class;
- (id)self;
很難理解,所以Class只是結構,而不是像NSObject等真實的類。
課堂的真正目的是什么?
我認為您的方法有誤。
頭文件應該看起來像這樣:
#import <Foundation/NSObject.h>
@interface Fraction: NSObject {
int numerator;
}
-(void) print;
@end
和這樣的實現(.m文件)
#import "Fraction.h"
#import <stdio.h>
@implementation Fraction
-(void) print {
printf( "%i", numerator );
}
@end
問候
在Objective-C中,類是“ 一流的對象 ”。 它們在運行時類型檢查中至關重要,例如,檢查對象是否為可以使用的字符串
[obj isKindOfClass:[NSString class]];
-isKindOfClass:
需要接受一個Objective-C類作為參數, Class
是它的表示。
(除非需要在C API級別以下操作Objective-C運行時,否則您幾乎不需要關心objc.h
的類型定義。)
類使Objective-C運行時系統知道在哪里查找方法表(以及實例變量等)。 特別是當你寫
[self foo: bar];
運行時系統調用
objc_msgSend(self, @selector(foo:), bar);
然后使用self的類型找到正確的Class,以找到適當的方法表,以找到與foo:
消息相對應的實現。 然后運行它。
由於具有Class
類,因此可以使用Objective-C運行時的所有動態行為。 它不是您將永遠繼承或實現的類。 運行時會填寫有關您的類的元數據,可以進行內省或修改以訪問該元數據。
諸如C ++甚至Java之類的語言對這種事情的支持非常有限。 在這方面,Objective-C更接近Ruby或Python腳本語言。 實際上,您可以在運行時用自己的實現替換現有類中的實例方法,並以大多數編譯語言無法觸及的其他方式影響類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.