2011-01-11 37 views
29

Tôi muốn chuyển đổi một chuỗi thành tên lớp. Hãy tưởng tượng rằng tôi có một chuỗi, mà thay đổi, có chứa một tên lớp, ví dụ, chuỗi "MyExampleClass". Bây giờ, tôi muốn tạo một đối tượng của lớp MyExampleClass. Tôi phải lấy tên lớp từ chuỗi. Tôi muốn làm một cái gì đó như sau. (Hãy xem xét mã như một bản phác thảo.)Chuyển đổi một chuỗi ("MyExampleClass") thành tên lớp (MyExampleClass)

NSString *classNameStr = "MyExampleClass"; 
id theClass = [UIClass classFromString:classNameStr]; 
theClass *myObject = [[theClass alloc] init]; 

Cách đúng để làm điều này là gì?

+0

bạn chưa đọc hướng dẫn về sự phản chiếu của java chưa? – atk

+0

@atk: iOS không có cú pháp khác? – EmptyStack

+0

Xin lỗi. Tôi đã nghĩ rằng tôi đã thấy "java" trong các thẻ. Tôi đã lầm :) – atk

Trả lời

76

Đây là những gì bạn muốn:

Class theClass = NSClassFromString(classNameStr); 
id myObject = [[theClass alloc] init]; 

Lưu ý rằng bạn không thể sử dụng theClass như một tên loại (có nghĩa theClass *myObject). Bạn sẽ phải sử dụng id cho điều đó.

23

Bạn muốn NSClassFromString:

NSString *classNameStr = @"MyExampleClass"; 
Class theClass = NSClassFromString(classNameStr); 
id myObject = [[theClass alloc] init]; 

Bạn cũng có thể sử dụng các giao diện runtime objc (ví dụ objc_getClass(const char* name), objc_lookUpClass(const char* name)). Trước đây sẽ không tải một lớp. Sau đó sẽ. Tùy chọn đó có thể là một điều tốt trong một số trường hợp.

6
id a = [[NSClassFromString(@"MyExampleClass") alloc] init]; 

sử dụng tùy chọn này sẽ cung cấp cho bạn những gì bạn muốn.

0

Nếu bạn đang cố gắng xây dựng các lớp học của mình một cách năng động, tôi khuyên bạn nên xem xét kỹ hơn mẫu thiết kế phương thức nhà máy, nếu không bạn sẽ mất dấu người xây dựng cái gì và như thế nào.

Để làm như vậy, bạn có thể mã một lớp nhận chuỗi và trả về một lớp tùy thuộc vào chuỗi đầu vào.

Hãy xem cuốn sách "Mẫu thiết kế: Các yếu tố của phần mềm hướng đối tượng có thể sử dụng lại" bởi Erich Gamma; Richard Helm; Ralph Johnson; John Vlissides.

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