Objective_C — Αναλυτικός οδηγός εξάσκησης — DedSec Project
Objective-C — αντικείμενα Foundation και ακέραιοι C Υπολόγισε άθροισμα NSNumber Αποθήκευσε ως main.m. Σε πραγματικό Apple Foundation SDK το αριθμητικό μέρος της αναμενόμενης εκτύπωσης είναι…
Objective-C — αντικείμενα Foundation και ακέραιοι C
Υπολόγισε άθροισμα NSNumber
#import <Foundation/Foundation.h>
int main(void) {
@autoreleasepool {
NSArray<NSNumber *> *values = @[@2, @3, @4];
NSInteger total = 0;
for (NSNumber *item in values) {
total += item.integerValue;
}
NSLog(@"%ld", (long)total);
}
return 0;
}
Αποθήκευσε ως main.m. Σε πραγματικό Apple Foundation SDK το αριθμητικό μέρος της αναμενόμενης εκτύπωσης είναι 9· η NSLog μπορεί να προσθέτει ώρα και στοιχεία διεργασίας. Το NSNumber είναι αντικείμενο και η integerValue παρέχει τιμή ακεραίου.
Εξέτασε λάθος τύπο
Βάλε NSString σε ξεχωριστό δοκιμαστικό πίνακα χωρίς σαφή generics και σύγκρινε compiler warnings με τη συμπεριφορά μηνυμάτων κατά την εκτέλεση. Μη θεωρείς ότι οποιοδήποτε Foundation object υποστηρίζει integerValue. Εξήγησε τον ρόλο του @autoreleasepool και των χρόνων ζωής αντικειμένων.
Έλεγχος πλατφόρμας
Τα Apple Foundation και GNUstep απαιτούν διαφορετικές ρυθμίσεις build. Το Termux δεν παρέχει αυτομάτως Apple SDK. Κατάγραψε compiler, SDK, εντολές και διαγνωστικά· δεν έγινε Objective-C compilation εδώ.
Έλεγξε τα περιεχόμενα πραγματικής συλλογής
Ο τύπος NSArray<NSNumber *> περιγράφει τις προσδοκίες του compiler, αλλά δεν αποδεικνύει ότι ένα αντικείμενο από JSON ή δυναμική εισαγωγή έχει σωστό τύπο κατά την εκτέλεση. Αν προέρχεται από εξωτερικά δεδομένα, έλεγξε την πραγματική κλάση Foundation πριν μετατρέψεις. Εξέτασε αν Boolean πρέπει να θεωρείται αριθμός. Σύγκρινε NSInteger, που εξαρτάται από την αρχιτεκτονική, με ακέραιο συγκεκριμένου πλάτους για δυαδικό format. Σε κενό NSArray το άθροισμα πρέπει να είναι 0 χωρίς εκτέλεση του βρόχου. Το autorelease pool διαχειρίζεται συγκεκριμένα αντικείμενα Objective-C, όχι οποιαδήποτε κατανομή C και δεν εξασφαλίζει από μόνο του τη διάρκεια ζωής όλων των pointers.