Résumé: Pouvez-vous append à ma list de contrôle des choses à surveiller lors de la migration vers iOS 5? StackOverflow a été d'une valeur inestimable car j'ai travaillé sur la mise à niveau vers iOS 5. J'ai découvert des choses assez basiques que j'avais manqué avant Xcode 4.2, et je me request ce que d'autres "pièges" pourraient cacher.
Détail: Avec iOS 5 expédition cette semaine, j'ai dû apporter quelques modifications à quelques unes de mes applications. Xcode 4.2 fait un travail bien meilleur en analysant le code de memory management à cause de la nouvelle fonctionnalité ARC. La mise à jour d'iOS 5 est un excellent point pour passer en revue tout votre code de memory management. Le nouveau compilateur trouve également un certain nombre d'autres problèmes que les compilateurs précédents ont manqués. Bravo aux ingénieurs compilateurs Apple. Voici les principales choses qui ont aidé (et beaucoup d'entre eux s'appliqueront également aux versions antérieures d'iOS).
Il y a quelques petites choses que j'ai rencontrées:
- (un void vide) release {}
D'autres suggestions d'embûches potentielles que je devrais searchr? J'ai l'printing que mes applications sont plus stables maintenant, mais je me sentais très bien à leur sujet avant.
1 / Les controllers modaux se comportent différemment, si vous changez leur taille. Si vous avez besoin d'une boîte de dialog modale d'une taille différente, envisagez d'utiliser les controllers de vue enfant iOS 5.
2 / Pour une table, si vous returnniez un en-tête de section nul et une hauteur positive, dans iOS 4, l'en-tête était masqué. Dans iOS 5, vous devez returnner une hauteur nulle pour les en-têtes nuls.
3 / UDID est obsolète. Vous pouvez utiliser CFUUIDCreate pour créer un ID unique et l'save dans vos parameters, mais sachez que datatables d'un périphérique peuvent être sauvegardées puis restaurées sur un autre périphérique, vous laissant deux appareils avec le même ID. J'ai résolu la situation en enregistrant mon identifiant dans keychain avec l'atsortingbut kSecAttrAccessibleWhenUnlockedThisDeviceOnly.
A propos de votre list: [super viewDidUnload] doit toujours être appelé comme la dernière instruction de votre viewDidUnload. La logique est la même que dans [super dealloc]. Notez que vous devriez aussi appeler [self viewDidUnload] dans votre dealloc (si vous n'y libérez pas déjà votre memory) car il n'est pas appelé implicitement (bien que ce soit parfois le cas).
De mes expériences, la détection de fuite dans Instruments ne signale pas les fuites sur les propriétés qui sont synthétisées sans assigner un nom de propriété.