İlginç bir sorun. 35:
2013-05-07 12: Mac (OS X 10.7.5) Bu verir On
Class c1 = [@"" class];
Class c2 = NSClassFromString(NSStringFromClass([@"" class]));
// The names are the same under iOS and OS X
NSLog(@"c1: '%@', c2: '%@'", c1, c2);
// The pointers are the same under iOS but different under OS X
NSLog(@"*c1: '%p', *c2: '%p'", c1, c2);
if (c1 == c2) {
NSLog(@"== equal"); // iOS
} else {
NSLog(@"== not equal"); // OS X
}
if ([c1 isEqual:c2]) {
NSLog(@"isEqual: equal"); // iOS
} else {
NSLog(@"isEqual: not equal"); // OS X
}
const char *n1 = class_getName(c1);
const char *n2 = class_getName(c2);
if (strcmp(n1, n2) == 0) {
NSLog(@"name equal"); // Both iOS and OS X
} else {
NSLog(@"name not equal");
}
: Aşağıdaki yorum olarak bahsedilen bazı şeyleri işaret 45,249 Testi [27483 : 303] c1: '_ NSCFConstantString', c2 ' _NSCFConstantString'
2013/05/07 12: 40: 06,673 test [27542: 303] * C1: '0x7fff7d2bd740' * c2 '0x7fff7d28ae48'
2013-05-07 12: 35: 45.250 Test [27483: 303] == eşit değil
2013-05-07 12: 35: 45.251 Test [2 7483: 303] IsEqual: eşit değildir 2013/05/07 12
: 35: 45,251 test [27483: Eşit 303] adı
IOS üzerinde
(6,1), bu verir:
2013- 05-07 12: 38: 11.816 Test [27516: 11303] c1: '_ NSCFConstantString', c2: ' _NSCFConstantString'
2013-05-07 12: 41: 01.319 Test [27557: 11303] * c1: ' 0x1db88f8 ', * c2:' 0x1db88f8 '
2013-05-07 12: 38: 11.816 Test [27516: 11303] == eşit
2013-0 05-07 Aralık: 38: 11.816 test [27516: 11303] IsEqual: Eşit
2013/05/07 12: 38: 11.816 test [27516: 11303] adı eşittir
temel fark olduğu görülmektedir iOS altında, iki Class
değeri aynı nesnedir, ancak OS X altında iki farklı nesne vardır.
Yani o yüzden
class_getName
iyi bir alternatif gibi görünüyor kullanarak iki
Class
değerleri karşılaştırmak için herhangi bir işlev bulamadık en azından OS X altında
==
veya
isEqual:
kullanarak iki
Class
değerleri karşılaştırmak için güvenli değildir görünüyor.
'NSStringFromClass' ve' NSClassFromString' sonuçlarının ne olduğunu belirlemek için hata ayıklayıcısını kullanarak veya günlüğe kaydetmeyi denediniz mi? –
"[@" "sınıfının" NSString'in oluşturulup oluşturulmadığına, statik olarak tanımlanıp tanımlanmadığına bağlı olarak birkaç farklı değere sahip olabileceğini tahmin ediyorum. Kakao, aynı dışsal için birden fazla iç sınıfa sahip olmayı çok seviyor ve muhtemelen bunlar iOS ve OSx arasında farklıdır. –
OS X'de ve iOS'ta 'foo' var. Her iki dizge de '__NSCFConstantString' özel sınıfının aynısıdır. 'Printf();' –