Làm cách nào để tôi có thể viết lại lớp tiện ích sau để nhận tất cả các giá trị chuỗi lớp cho một loại cụ thể - bằng cách sử dụng các hàm thời gian chạy Objective-c như được hiển thị bên dưới?realloc() & ARC
Các tài liệu ARC đặc biệt khẳng định rằng realloc nên tránh và tôi cũng nhận được lỗi biên dịch sau đây về vấn đề này dòng này:
classList = realloc(classList, sizeof(Class) * numClasses);
"chuyển đổi ngầm của một loại con trỏ không Objective-C 'void * 'to' __unsafe_unretained Class * 'không được phép với ARC "
Mã bên dưới là tham chiếu đến bài viết gốc có thể được tìm thấy here.
+ (NSArray *)classStringsForClassesOfType:(Class)filterType {
int numClasses = 0, newNumClasses = objc_getClassList(NULL, 0);
Class *classList = NULL;
while (numClasses < newNumClasses) {
numClasses = newNumClasses;
classList = realloc(classList, sizeof(Class) * numClasses);
newNumClasses = objc_getClassList(classList, numClasses);
}
NSMutableArray *classesArray = [NSMutableArray array];
for (int i = 0; i < numClasses; i++) {
Class superClass = classList[i];
do {
superClass = class_getSuperclass(superClass);
if (superClass == filterType) {
[classesArray addObject:NSStringFromClass(classList[i])];
break;
}
} while (superClass);
}
free(classList);
return classesArray;
}
Trợ giúp của bạn sẽ được đánh giá cao.
Tạo danh sách lớp rõ ràng (void *). Cũng xem xét không sử dụng realloc. Bạn đang cố gắng làm gì ở đây? – Dustin
Bạn có thực sự cần phải chạy mã với ARC, hoặc nó sẽ được chấp nhận để bạn chạy mã trong chế độ không ARC (cờ '-fno-objc-arc' trong cài đặt xây dựng đích cho các lớp mà bạn muốn vô hiệu hóa ARC). Xem: http://stackoverflow.com/questions/6646052/how-can-i-disable-arc-for-a-single-file-in-a-project –
@WolfgangSchreurs Cảm ơn, tôi hoàn toàn quên về tùy chọn cờ liên kết . – RynoB