Objective-C de la propriété - getter comportement
Ce qui est techniquement faux avec les éléments suivants:
@property(nonatomic, assign) NSUInteger timestamp;
@property(nonatomic, readonly, getter = timestamp) NSUInteger startTime;
@property(nonatomic, assign) NSUInteger endTime;
Je suis sûr que je peux trouver une meilleure façon de l'organiser, mais c'est ce que j'ai à un moment donné dans mon projet et j'ai remarqué que accès à la startTime propriété retourne toujours 0, même lorsque l'horodatage de la propriété a été définie pour l'estampillage,.
Il semble avoir mis de la lecture de startTime à une propriété existante (timestamp), il n'est pas de transmettre la valeur d'horodatage quand je fais:
event.startTime => 0
event.timestamp => 1340920893
Tous ces sont des horodateurs, par la manière.
Juste un rappel, je sais ce qui précède doit se passer dans mon projet, mais je ne comprends pas pourquoi l'accès startTime ne pas avancer sur l'horodatage de la propriété.
Mise à JOUR
Dans mon application je suis résume l'ensemble de ces propriétés:
@synthesize timestamp, endTime, startTime;
Veuillez consulter un exemple d'objet à utiliser qui illustre ce à mon gist sur GitHub: https://gist.github.com/3013951
getter
?En fait, ma réponse était fausse. Il n'a pas d'importance si vous avez plusieurs propriétés liées à la même sélecteur. Je dirais qu'il n'y a pas de problème avec cette...
J'ai seulement couru mon test dans le dernier XCode dans un ARC de projet. Il peut être possible, cela a été un changement dans Clang à un certain point.
Je ne suis pas d'avoir une erreur lorsque j'accède à startTime, mais la valeur est toujours 0, peu importe ce timestamp de la propriété.
OriginalL'auteur Daniel | 2012-06-28
Vous devez vous connecter pour publier un commentaire.
Dans la description de votre méthode, vous n'êtes pas à l'aide de la propriété, vous avez accès au ivar.
Cela fonctionnera pour vous:
Le bien-vs-ivar chose mess des gens tout le temps, donc excusez-moi pendant que je radoter sur ce sujet pendant une minute. 🙂 Si vous savez déjà tout cela, passez à l'avance.
Lorsque vous créez et synthétiser une propriété, comme vous l'avez fait ci-dessus, deux choses se produisent:
La partie importante concernant le point 2, c'est que, par défaut, le ivar et la fonction get (et, par conséquent, la propriété) ont les mêmes noms.
Donc:
...se transforme en ceci:
Comment la syntaxe à point fonctionne, c'est que cela:
vraiment
Tout ça pour dire que lorsque vous accédez à un ivar, vous êtes..., l'accès à un ivar. Lorsque vous utilisez une propriété, vous êtes à l'appel d'une fonction qui retourne une valeur. Plus important encore, il est extrêmement facile de faire une chose quand vous parliez de l'autre, parce que la syntaxe est très similaire. C'est pour cette raison que de nombreuses personnes régulièrement synthétiser leurs ivars avec les principaux traits de soulignement, de sorte qu'il est plus difficile de désordre.
OriginalL'auteur zpasternack
Assurez-vous de les synthétiser dans l'ordre de la lecture existe pour
startTime
.Le compilateur que vous utilisez? Je suis à l'aide d'Apple LLVM 3.1 et il fonctionne très bien pour moi.
Je suis en utilisant le même. Je viens de posté un lien vers un exemple de code, merci de le tester de votre côté si vous serait donc de nature.
OriginalL'auteur Joe