Påstand (NSAssert) ansøgning i IOS

Assertion Application Ios



NSAssert () er en makro, der bruges til at debugge fejl i udviklingsfasen. Ved at videregive et betinget udtryk til NSAssert () for at afgøre, om det er en fejl, returnerer betingelsen sand, programmet fortsætter med at køre, og hvis en falsk værdi returneres, kastes den. En undtagelse, og undtagelsesbeskrivelsen kan tilpasses.

Når man ser på kildekoden, kan vi se, at NSAssert er defineret som sådan, NSAssert (betingelse, beskrivelse), betingelse tager den modsatte værdi. For eksempel, når en værdi ikke kan være null, NSAssert (param! = Nul, @ 'param kan ikke være tom')



#define NSAssert(condition, desc, ...) do { __PRAGMA_PUSH_NO_EXTRA_ARG_WARNINGS if (__builtin_expect(!(condition), 0)) { NSString *__assert_file__ = [NSString stringWithUTF8String:__FILE__] __assert_file__ = __assert_file__ ? __assert_file__ : @'' [[NSAssertionHandler currentHandler] handleFailureInMethod:_cmd object:self file:__assert_file__ lineNumber:__LINE__ description:(desc), ##__VA_ARGS__] } __PRAGMA_POP_NO_EXTRA_ARG_WARNINGS } while(0) #endif #if !defined(_NSCAssertBody) #define NSCAssert(condition, desc, ...) do { __PRAGMA_PUSH_NO_EXTRA_ARG_WARNINGS if (__builtin_expect(!(condition), 0)) { NSString *__assert_fn__ = [NSString stringWithUTF8String:__PRETTY_FUNCTION__] __assert_fn__ = __assert_fn__ ? __assert_fn__ : @'' NSString *__assert_file__ = [NSString stringWithUTF8String:__FILE__] __assert_file__ = __assert_file__ ? __assert_file__ : @'' [[NSAssertionHandler currentHandler] handleFailureInFunction:__assert_fn__ file:__assert_file__ lineNumber:__LINE__ description:(desc), ##__VA_ARGS__] } __PRAGMA_POP_NO_EXTRA_ARG_WARNINGS } while(0) #endif

NSAssert og hævde forskel

Både NSAssert og assert er påstande. Hovedforskellen er, at assert simpelthen afslutter programmet, når påstanden mislykkes, og NSAssert rapporterer fejlmeddelelsen og udskriver den. Så brug bare NSAssert, du kan ikke bruge assert.



NSAssert / NSCAssert

Det mest anvendte i iOS er to par påstande, NSAssert / NSCAssert og NSParameterAssert / NSCparameterAssert. For at kende forskellen, lad os se på deres definitioner (ovenfor).



Som du kan se fra definitionen, er førstnævnte en passende metode til ObjectC, og _cmd og self er relateret til runtime. Sidstnævnte er en funktion for C.
NSParameterAssert / NSCparameterAssert Forskellen mellem de to er også den tidligere metode til Objective-C, den sidstnævnte for C-funktioner.
I den faktiske udvikling kan førstnævnte bruges.

Forskellen mellem NSAssert / NSCAssert og NSParameterAssert / NSCparameterAssert er, at førstnævnte er til betingede påstande, og sidstnævnte kun er for påstande om, hvorvidt der findes parametre. Ved fejlretning kan du kombinere dem, først bestemme parametre og derefter yderligere hævde årsagen.

Brug af NSAssert

int a = 1 NSCAssert(a == 2, @'a must equal to 2') //The first argument is a condition. If the first argument does not satisfy the condition, the following string will be logged and printed.

Kørslen vil gå ned og output informationen i konsollen som følger:



*** Assertion failure in *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'a must equal to 2'

NSParameterAssert brug

- (void)assertWithPara:(NSString *)str { NSParameterAssert(str) // Only one parameter is needed. If the parameter exists, the program continues to run. If the parameter is empty, the program stops printing the log. //further code ... }

Hvis metoden kaldes assertWithPara: den indkommende parameter er tom, er følgende log

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: str'

Nummeret i loggen fortæller dig, hvor mange kodelinjer der er gået galt.

Xcode har som standard annulleret påstanden i frigivelsesmiljøet, hvilket eliminerer ustabiliteten af ​​programmet forårsaget af at glemme at lukke påstanden. Så rolig med at bruge det dristigt under udviklingen.

Brugerdefineret NSAssertionHandler

NSAssertionHandler-forekomsten oprettes automatisk til at håndtere fejlpåstande. Hvis betingelserne NSAssert og NSCAssert vurderes som fejl, sendes en streng, der angiver fejlen, til NSAssertionHandler-forekomsten. Hver tråd har sin egen NSAssertionHandler-forekomst.
Vi kan tilpasse behandlingsmetoden, så når påstanden bruges, udlæser konsollen en fejl, men programmet går ikke direkte ned.

#import 'MyAssertHandler.h' @implementation MyAssertHandler / / Handle Objective-C assertions -(void)handleFailureInMethod:(SEL)selector object:(id)object file:(NSString *)fileName lineNumber:(NSInteger)line description:(NSString *)format, ... { NSLog(@'NSAssert Failure: Method %@ for object %@ in %@#%li', NSStringFromSelector(selector), object, fileName, (long)line) } / / Handling C language assertions -(void)handleFailureInFunction:(NSString *)functionName file:(NSString *)fileName lineNumber:(NSInteger)line description:(NSString *)format, ... { NSLog(@'NSCAssert Failure: Function (%@) in %@#%li', functionName, fileName, (long)line) } @end

Føj en behandlingsklasse til tråden

NSAssertionHandler *myHandler = [[MyAssertHandler alloc] init] / / to the current thread processing class [[[NSThread currentThread] threadDictionary] setValue:myHandler forKey:NSAssertionHandlerKey]