Objective-C belgelerinde de okuduğum Objective-C örneklerinin çoğunda, nesneler her zaman kullanımdan önce başarılı bir şekilde tamamlanma açısından kontrol edilir. ÖrneğinBu nesnelerin gerçekten ayrıldığını kontrol etmemiz gerekiyor mu?
:
MyObject *myObject = [[MyObject alloc] init];
if (myObject){
//do stuff with the object
}
//stuff beyond here is probably not going to work if myObject is nil
bu hataları izlemek zor yapmaz mı? Tahsisin neden düşük bellek dışında neden başarısız olacağından emin değilim, ancak bir nesneyi başlattıktan hemen sonra Java'da (geçiş yaptığım dil) yapılan böyle bir kontrol görmedim.
Her bir tahsisini kontrol edip başarısız tahsislere tepki vermeye çalıştıysanız, uygulamanın çok kıvrımlı bir hale geleceğini varsayalım. Sanırım birçok durumda kullanıcıya bir hata mesajı gösterebilirsiniz, ancak programdaki şube sayısı muhtemelen iki katına çıkacaktır.
Ancak, gördüğüm örneklerde, kullanıcıların ekranda ne beklediklerini görmeleri için gerekli olan bazı kodları atlamanın yanı sıra, ayırma başarısız olduğunda hiçbir şey yapmıyorlar. Başarısız tahsisatların uygulamada gerçekten çok fazla gerçekleşip gerçekleşmediği ve bu kodlama stilini izlediyseniz, sonuçta kullanıcı ve programcının habersiz olduğu, kullanıcı tarafından kaydedilmiş olduğunu düşündüğü, kaydedilmeyen kaydedilmiş belgeler, kaydedilmemiş belgeler olacaktır.
DÜZENLEME: İşte Apple'ın öğreticisinden "Üçüncü iOS Uygulamanız: iCloud" örneğidir. başlatma başarısız olursa
- (NSMetadataQuery*)textDocumentQuery {
NSMetadataQuery* aQuery = [[NSMetadataQuery alloc] init];
if (aQuery) {
// Search the Documents subdirectory only.
[aQuery setSearchScopes:[NSArray
arrayWithObject:NSMetadataQueryUbiquitousDocumentsScope]];
// Add a predicate for finding the documents.
NSString* filePattern = [NSString stringWithFormat:@"*.%@",
STEDocFilenameExtension];
[aQuery setPredicate:[NSPredicate predicateWithFormat:@"%K LIKE %@",
NSMetadataItemFSNameKey, filePattern]];
}
return aQuery;
}
Bunu hiç görmedim kod böyle basit bir durumda. Gördüğün gerçek bir örnek sunabilir misin? – Chuck
en azından ios'da, eğer 'tahsis', 'bellek' için bir sebepten ötürü geri döndüyse, uygulamanız her neyse, yine de tarafından öldürülecektir. –
@Chuck Bir örnek ekledim. – Tenfour04