Tôi có các trẻ em NSMutableArray * trong tầng lớp cơ sở hạ tầng "Foo" là siêu lớp của nhiều lớp khác, như "Bar1" và "Bar2". Mảng đó lưu trữ các đối tượng Bar1 và Bar2 để có được cấu trúc cha-con đệ quy giống như con của các lớp con từ Foo. Để truy cập vào các đối tượng trong mảng, tôi vòng qua chúng bằng cách sử dụng vòng lặp foreach trong Objective-C:Objective-C NSMutableArray - vòng lặp foreach với các đối tượng của nhiều lớp
for(Foo *aFoo in children) {
...
}
Nhưng thường thì tôi chỉ cần để lặp qua các đối tượng trong mảng đó có một lớp học nào đó, trong này trường hợp tôi muốn thực hiện một nhiệm vụ cho từng đối tượng của lớp Bar1 trong mảng con. Sử dụng cho (Bar1 * anObject ở trẻ em) một lần nữa lặp qua tất cả các đối tượng và không chỉ những người có lớp Bar1. Có cách nào để đạt được những gì tôi cần không?
điều này có thể khá tốn kém về bộ nhớ nhưng dường như không có cách nào khác. Cảm ơn bạn –
không, nó không thay đổi bộ nhớ của bạn, bạn chỉ đọc những gì đã có trong bộ nhớ – unbeli
Nói chung, nếu bạn cần sử dụng 'isKindOfClass:' để phân biệt giữa các lớp trong một bộ sưu tập, mẫu thiết kế của bạn nằm ngoài tiêu chuẩn. Điều này đặc biệt đúng nếu bộ sưu tập của bạn chứa các phiên bản của các lớp hoàn toàn trong quá trình tạo của bạn. – bbum