2012-01-04 23 views
17

Herhangi biri, arc altında, söz konusu dosya için arc kapamadan kısa bir süre sonra, objc_getClassList'i kullanmayı başardı mı?Nesc_getClassList öğesinin ark altında kullanılması

Temel sorun, parametrelerden birinin bir C sınıfı işaretçi dizisi olmasıdır.

+0

İyi soru. Böyle durumlarda ARC oldukça garip görünüyor. Söz konusu dosya için bunu devre dışı bıraktım, ancak etrafta dans etmenin ne olduğunu anlamaya çalışmaktan çok zaman harcadım, ama ARC etkinken bunu yapmanın nispeten basit bir yolu olup olmadığını merak ediyorum. – jlehr

cevap

32

Bu kod ARC altında çalışması gerekir:

int numClasses; 
Class *classes = NULL; 

classes = NULL; 
numClasses = objc_getClassList(NULL, 0); 
NSLog(@"Number of classes: %d", numClasses); 

if (numClasses > 0) 
{ 
    classes = (__unsafe_unretained Class *)malloc(sizeof(Class) * numClasses); 
    numClasses = objc_getClassList(classes, numClasses); 
    for (int i = 0; i < numClasses; i++) { 
     NSLog(@"Class name: %s", class_getName(classes[i])); 
    } 
    free(classes); 
} 
+2

Not olarak, bu kodu çalıştırdığınız bağlam dışındaki sınıf nesnelerini kullanmak isterseniz (örneğin, bu işlevi kullanan bir işlevden dönüş olarak), __unsafe_unretained Sınıfından bir ARC belleği yönetilen Sınıfı alabilirsiniz. NSClassFromString (NSStringFromClass (sınıflar [i])) yaparak. Sınıf kopyasını almanın daha etkili bir yolu olup olmadığından emin değilim, ama bu şekilde benim için işe yarayacak gibi görünüyor. Eğer sadece dersleri [i] döndürdüyseniz, nesne serbest (sınıflar) çağrıda serbest kaldığı için doğrudan sarkık bir işaretçiyle sonlanacaksınız. – stuckj

İlgili konular