2010-03-28 34 views
6

Tôi đang xem xét giới thiệu:Hình phạt hiệu suất của việc sử dụng isKindOfClass trong Mục tiêu C là gì?

if ([myInstance isKindOfClass:[SomeClass class]]) { do something...} 

thành một đoạn mã được gọi khá thường xuyên. Tôi sẽ giới thiệu một hình phạt hiệu suất đáng kể? Trong Mục tiêu C, có cách nào nhanh hơn để đánh giá liệu một cá thể đối tượng đã cho có thuộc loại lớp nào đó không? Ví dụ, sau đây có nhanh hơn không? (Tôi nhận ra những thử nghiệm là hơi khác)

if (myInstance.class == [SomeClass class]) { do something else...} 
+6

gì đã kết quả hồ sơ của bạn cho bạn biết? –

+0

Tôi chưa thực hiện bất kỳ hồ sơ nào; đó là bước tiếp theo của tôi. Tôi đã hy vọng tìm thấy một số tài liệu giải thích các phép thuật cơ bản cho các lớp học trong Objective C trước khi nhảy vào thử nghiệm mù hoàn hảo. Tuy nhiên, tôi đã không tìm thấy bất cứ điều gì vì vậy tôi sẽ chỉ cố gắng hoán vị khác nhau tiếp theo. Bất kỳ đề xuất về cách khác tôi có thể xác định một loại lớp học của một trường hợp nhất định? – durcicko

+0

Không có điều gì như kiểm tra hiệu suất mù ... chỉ tối ưu hóa mù! Ngoài ra, thời gian chạy Obj-C quyết định phương thức nào để gọi dựa trên lớp của đối tượng mỗi khi bạn gọi một phương thức, vì vậy hãy tận dụng điều đó bằng cách đặt {do something ...} vào một phương thức trên lớp mà bạn quan tâm – codewarrior

Trả lời

4

Cách nhanh nhất để xem nếu hai đối tượng đều của lớp cùng là so sánh isa con trỏ của họ. Tuy nhiên, điều này có nghĩa là bạn sẽ bỏ lỡ khi một lớp của đối tượng là một lớp con của lớp của đối tượng khác, đó là chính xác những gì isKindOfClass: có nghĩa là cho.

Bất kể, tối ưu hóa bạn đang nói về đã được thực hiện ở đây:

http://www.mulle-kybernetik.com/artikel/Optimization/opti-3-imp-deluxe.html

+0

Đó chính xác là loại thông tin tôi đang tìm kiếm. Cảm ơn đã chỉ cho tôi theo hướng đó. – durcicko

+0

Có người nói với tôi Apple không muốn bạn sử dụng con trỏ 'isa' trực tiếp nữa. – funroll

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