2010-06-26 27 views
6

Tôi có 2 lớp, Phụ huynh và con, và Phụ huynh có một phương thức lớp có tên là func. Bây giờ tôi muốn lấy Class instance trong phương thức func để phân biệt lớp nào là người gọi.Mục tiêu-c: Làm thế nào tôi có thể lấy dụ lớp trong phương thức lớp

@interface Parent : NSObject 
+ (void)func; 
@end 

@implementation Parent 

+ (void)func { 
    Class *class = howToGetClass(); 
    NSLog(@"%@ call func", class); 
} 

@end 

@interface Child : Parent 
@end 

int main() { 
    [Child func]; // call func from Child 
} 

Có cách nào để lấy cá thể lớp (hoặc tên lớp) trong phương thức lớp không?

Trả lời

16

Nếu bạn chỉ muốn đăng nhập nó/nhận nó như là một Class, bạn chỉ cần self. Đó là nó. Vì vậy, như

+ (void)func { 
    Class class = self; 
    NSLog(@"%@ call func", class); 
} 

hoặc

+ (void)func { 
    NSLog(@"%@ call func", self); 
} 

cũng vậy, nếu bạn muốn để có được tên như một NSString, NSStringFromClass (tự) đã có bạn bảo hiểm. (Là một char *, class_getName (self) là những gì bạn đang tìm kiếm)

+0

Tôi đang cố gắng thêm một số phương thức tiện ích (như tất cả() trong django) vào NSManagedObject. Vì vậy, tôi cần phải phân biệt người gọi. Sử dụng 'tự' là những gì tôi muốn biết! Cảm ơn! – taichino

+0

Đó không phải là tôi đã bỏ phiếu, nhưng tôi vừa kiểm tra, và trong một phương thức lớp học self == [tự lớp] Chỉ thấy điều này đã được nói trong một bình luận khác, nhưng để làm rõ, chúng là NHẬN ĐỊNH, trong một phương thức lớp học ít nhất. Vì vậy, bạn đã đúng, và vì vậy tôi là –

+1

Lớp * lớp = tự; là sai. Tẩy *. Cú pháp đúng là: Class class = self; – Lukasz

3

Để có được đối tượng lớp hiện tại, bạn sẽ có thể làm:

[self class]; 

Như tự sẽ đề cập đến các trường hợp lớp, bởi vì nó là một phương pháp học. Class là một phương thức được định nghĩa trong NSObject, nó trả về lớp cho đối tượng.

Edited để tránh nhầm lẫn ...

+0

Để làm rõ, điều này trả về đối tượng 'Lớp' của lớp học của bạn, không chỉ tên * * được ngụ ý bởi câu trả lời. –

+3

thực sự, [class tự] giống như self trong một method class. Các tài liệu (ok tốt các tài liệu GNUStep) thực sự nói nó được thực hiện chỉ với 'trở về tự;'. Nó chỉ tồn tại để chuyển các lớp như các đối số, xem http://stackoverflow.com/questions/3107213/why-do-we-have-to-do-myclass-class-in-objective-c –

+1

Cảm ơn bạn rất nhiều! Tôi không biết rằng 'tự' có thể được sử dụng trong phương pháp lớp học! – taichino

Các vấn đề liên quan