Nesnenin üst sýnýflarýný çalþma sýrasýnda deðiþtirmek mümkün mü? Öyleyse nasıl?Bir nesnenin üst sınıf sýnýfýný dinamik olarak deðiþtirme
cevap
kısa bir soru, kısa cevap: Ben, bu bir REST API bağlantıları işleyen bir sınıftır var
: evet, isa
What Makes Objective C Dynamic?, page 66
bir örnek swizzling APIClient denir. Testte farklı bir sunucuya bağlanmak istiyorum. test hedefi olarak
ben swizzling alma yapmak Birim testi sınıfında APIClient#import "ApiClient.h"
@interface TestApiClient : ApiClient
//…
@end
@interface TestApiClient()
@property (nonatomic, strong, readwrite) NSURL *baseURL;
@end
@implementation TestApiClient
- (NSMutableURLRequest *)requestWithMethod:(NSString *)method
path:(NSString *)path
parameters:(NSDictionary *)parameters
{
self.baseURL = [NSURL URLWithString:@"http://localhost:8000/"];
return [super requestWithMethod:method path:path parameters:parameters];
}
@end
alt sınıf Bu cas Ben ilk bir alt sınıfı yarattı olarak kaydetmek olduğunu
@implementation APIUnitTests
+(void)load
{
client = [[ApiClient alloc ] init];
object_setClass(client, [TestApiClient class]);
}
//…
@end
Temel sınıf ve daha sonra ikinci alt sınıf ile değiştirildi. Alt sınıf aynı zamanda bir temel sınıf olduğu için, bu geçerli bir mirastır.
Bu çok tehlikeli geliyor. Neden yeryüzünde istiyorsun? –
eğer doğru yapılırsa çok güçlüdür, elma KVO için kullanır: http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/KeyValueObserving/Articles/KVOImplementation.html – vikingosegundo
Şahsen onu kontrol etmek için kullanırım code: Bazı bilgileri kayıt altına almak ve orijinal yöntemleri süper aramaları için ilgilendiğim yöntemlerin alt sınıfını ve üzerine yazdım. – vikingosegundo
ObjC çalışma zamanı kullanılarak kesinlikle mümkündür, ancak biraz kıllı olacaktır ... Bu, Apple'ın dokümanlarına bir bağlantıdır: Objective-C Runtime ve kullanımının bir örneği: Objective-C Runtime Programming.
- 1. dinamik nesnenin arasında bir değer alma dinamik
- 2. Matlabda dinamik olarak sınıf oluşturma
- 3. Dinamik olarak bir sınıf yöntemi nasıl eklenir?
- 4. Scala: Bir sınıf özelliğine dinamik olarak ada göre nasıl erişilir?
- 5. Lift-json'u bir üst sınıf
- 6. İç içe geçmiş bir nesnenin alan değerlerini dinamik olarak değiştirin
- 7. WPF: Nesnenin özelliklerini (bazıları) bir nesnesine dinamik olarak bağlama
- 8. Dinamik bir sınıf oluşturma
- 9. C# alt sınıf türü üst sınıf olarak bildir
- 10. Bir üst nesnenin statik özelliğini nasıl geçersiz kılar ve üst nesnenin PHP'deki yeni değere erişmesine izin verilir?
- 11. Raylar - üst sınıf uyumsuzluğu
- 12. Üst düzey sınıf dokümantasyonu
- 13. Başka bir nesnenin özniteliği olarak nesne C++
- 14. Yüklendiğinde, dinamik olarak oluşturulmuş öğeye sınıf ekle
- 15. Nesnel-C'de sınıf dinamik olarak nasıl yüklenir?
- 16. Python'da sınıf özelliklerine dinamik olarak nasıl erişilir?
- 17. Sınıf isimleri dinamik olarak nasıl ayarlanır?
- 18. QT: Bir nesnenin sınıf adını al
- 19. Bir nesnenin 2 sınıf ismini nasıl karşılaştırırız
- 20. Dinamik işlev, genişletilmiş nesnenin yöntemini göremiyor
- 21. Python'da sınıf düzeyi değişkeninde dinamik olarak sınıf adı alın
- 22. Nesnenin sınıf örneğinin yerine bir sınıf nesnesi olup olmadığını öğrenin
- 23. Bir modülü dinamik olarak imp
- 24. SQLAlchemy'de Dinamik Sınıf Oluşturma
- 25. Sınıf adını depolayan bir değişken kullanarak sınıfların dinamik olarak eşleştirilmesi
- 26. .NET'te bir sınıf yöntemini dinamik olarak nasıl çağırırız?
- 27. Bir Swift sınıf adını dinamik olarak nasıl sıralayabilirim?
- 28. anında dinamik sınıf
- 29. Php dinamik sınıf yapısı
- 30. Dinamik bir nesnede bir yöntemi dinamik olarak nasıl çağırabilirim?
Bir isa swizzle örneği için http://stackoverflow.com/questions/11221110/my-isa-swizzling-breaks-kvo adresine bakın. – mttrb
Ayrıca, "bir nesnenin süper sınıfı" ile ne anlama geliyor? Bir * nesnesinin * süper sınıfı yoktur. Bir nesnenin bir sınıfı vardır ve sınıfının bir süper sınıfı vardır. Bununla birlikte, eğer nesnenin sınıfının üst sınıfını değiştirirseniz, ** bu sınıfın tüm üyeleri etkilenecektir, ** sadece tek bir nesne değil. –
neden birinci sınıf sınıfı mevcut değil? şimdiki sınıfa ne oldu? Dikkatlice düşünmek zorundasınız –