2014-02-14 9 views
5

Was ist der Unterschied zwischen NSAssert und NSCAssert? Als ich ihre Implementierung untersuchte, sahen sie sehr ähnlich aus und ich konnte keine Antwort auf meine Frage finden.NSAsssert vs NSCAssert

Ich denke, dass es auch den Unterschied zwischen NSParameterAssert und NSCParameterAssert erklären wird.

Antwort

11

Die zweite ist der Unterschied zwischen C und Objective-C Behauptungen: NSAssert nur in einem Objective-C-Kontext (dh Verfahren Implementierungen) verwendet werden soll, während NSCAssert nur in einem C-Rahmen verwendet werden soll (dh Funktionen).

Mehr auf http://nshipster.com/nsassertionhandler/

3

Das von NSHipster genommen wird, siehe link

Foundation zwei Paar Durchsetzung von Makros definiert:

NSAssert/NSCAssert

NSParameterAssert/NSCParameterAssert

Foundation unterscheidet in ihren Assertion-Handler-APIs zwei Unterscheidungen, die sowohl semantisch als auch funktional sind. Die erste Unterscheidung besteht zwischen einer allgemeinen Aussage (NSAssert) und einer Parameteraussage (NSParameterAssert). Als Faustregel gilt, Methoden/Funktionen sollten NSParameterAssert/NSCParameterAssert Anweisungen am Anfang der Methoden verwenden, um alle Vorbedingungen über die Eingabewerte zu erzwingen; In allen anderen Fällen verwenden Sie NSAssert/NSCAssert.

Die zweite ist der Unterschied zwischen C und Objective-C Behauptungen: NSAssert nur (dh Methodenimplementierungen) in einem Objective-C-Kontext verwendet werden soll, während NSCAssert sollte nur in einem C-Kontext (dh Funktionen) verwendet werden, .

2

NSAssert sollte nur in einem Objective-C-Kontext verwendet werden und NSCAssert sollte nur in einem C-Kontext (d. H. Funktionen) verwendet werden.

3

Beachten Sie, dass die Verwendung von NSAsert/NSParameterAssert innerhalb eines Blocks einen Retain-Zyklus verursachen kann. Verwenden Sie stattdessen die C-Varianten. Google NSAswert Retain-Zyklus