NSParameterAssert nedir?


Yanıtlar:


115

Bu, bir yöntemin parametresinin nil0 olup olmadığını test etmenin basit bir yoludur. Yani temelde, onu bir ön koşul oluşturmak için kullanırsınız ve bazı parametrelerin ayarlanması gerektiğini belirtirsiniz. Ayarlanmamışsa, makro uygulamanın durdurulmasına neden olur ve bu satırda bir hata oluşturur. Yani:

- (void)someMethod:(id)someObjectThatMustNotBeNil
{
  // Make sure that someObjectThatMustNotBeNil is really not nil
  NSParameterAssert( someObjectThatMustNotBeNil );
  // Okay, now do things
}

Ön koşullar, yöntemlerin / API'nin programcı tarafından doğru şekilde çağrılmasını sağlamanın basit bir yoludur. Buradaki fikir şudur ki, bir programcı ön koşulu ihlal ederse, uygulama erken - umarız hata ayıklama ve temel test sırasında - sona erer.

NSParameterAssert herhangi bir ifadenin doğru olarak değerlendirilip değerlendirilmediğini test etmek için kullanılabilir, böylece bunu da şu şekilde kullanabilirsiniz:

NSParameterAssert( index >= 0 ); // ensure no negative index is supplied

Apple'ın NSParameterAssert () makrosu için belgeleri


1
Kodunuzda istisnaları yakaladığınızdan emin olun, aksi takdirde Assert doğruysa uygulamanızı kilitler.
lucius

14
@lucius: İddialar, dağıtılmış bir uygulamadaki koşulları kontrol etmek için kullanılmaz, geliştirme sırasında hataları yakalamak için vardır. Sessizce başarısız olmak yerine kötü bir durumda (bir Ucun bağlantısız bir prizi gibi) bir şeyin çarpmasına neden olmak, sorunları erken bulmanızı sağlar. Çoğu kişi bunları dağıtım sırasında makrolar veya #ifdefs aracılığıyla devre dışı bırakır.
Brad Larson

5
@lucius - Amaç, ön koşullar karşılanmadığında uygulamanın iptal edilmesine neden olmaktır. Bu, programcının yanlış bir şey yaptığını anında bilmesini sağlar. Cocoa'daki iddiaların değerlendirilmemesini sağlamak için NS_BLOCK_ASSERTIONS makrosunu tanımlayabilirsiniz. Bu, onları devre dışı bırakır, ancak fikir, çökmeye karşı korumak yerine yan etkilerin veya yavaş kodun yürütülmesini engellemek - üretim yoluyla, doğru kullanıldığında iddialar asla tetiklenmemelidir.
Jason Coco

1
Üretim yapıları yaparken bu iddiaları basit bir şekilde kaldırmak mümkün mü? IMHO bunlar en iyi geliştirme sırasında programlama hatalarını yakalamak için kullanılır (yukarıdaki açıklamada belirtildiği gibi).
Johan Karlsson

5
@JohanKarlsson Bu mümkündür ve Releaseyapılandırmada şablonların mevcut sürümlerinde varsayılan olarak ayarlanır (bu oldukça uzağa gider) . Sen ayarlayarak bunu kontrol edebilir ENABLE_NS_ASSERTIONS, ya da tanımlayarak Xcode yeni sürümlerinde inşa ayarları NS_BLOCK_ASSERTIONSbir proje ayarı * Enable Vakfı Assertions` orada makro ve Xcode 5 1 olarak ayarlayarak buna setleri inşa ayarı ve varsayılan Yesiçinde Debugve Noiçinde Releasekonfigürasyonlar.
Jason Coco
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.