Lieber Besucher, herzlich willkommen bei: OS X Entwicklerforum. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
@interface AppDelegate : NSObject <NSApplicationDelegate> {
NSWindow *window;
TaxiFareCalculator *calculator;
}
@property (retain) IBOutlet NSWindow *window;
@property (retain) IBOutlet NSTextField *sliderValueLabel;
@property (retain) IBOutlet NSButton *checkIsNightTour;
@property (retain) IBOutlet NSButton *checkIsHolidaytour;
@property (retain) IBOutlet NSButton *checkHasLuggage;
@property (retain) IBOutlet NSTextField *taxiFarePrice;
- (IBAction)sliderDidMove:(id)sender;
- (IBAction)checkBoxDidChange:(id)sender;
@end
|
Wurden die passenden Variablen zu einem Property eigentlich schon immer automatisch erzeugt oder ist dies erst seit einer gewissen Xcode-, Compiler- oder SDK Version der Fall?
Wieso sollte man die Ivars nicht mehr im Header deklarieren?
Das ist seit @synthesize der Fall.
Vermutlich kann man dann unter Umgehung der Setter und Getter an die iVars, und das will ja bekanntlich keiner.
Aber den Bezeichner hat man ja auch über die Properties…
Zitat
Der Bezeichner window dient als Zeiger auf das Programmfenster.
Also erstmal vielen Dank. Was sind denn Ivar? Einfach Variablen?
Und wenn ichs richtig verstanden habe, gibts also keinen Zweck mehr Variablen im Header zu deklarieren, ausser eben man will keine Getter und Setter über die Properties automatisch generieren lassen oder?
In meinem Buch steht nämlich zu dieser doppelten Deklaration vom Window Objekt:
Aber den Bezeichner hat man ja auch über die Properties…
Zitat
Der Bezeichner window dient als Zeiger auf das Programmfenster.![]()
Ah ja und noch eine Frage die teils dazu passt. Wenn ich ein IBOutlet direkt vom Interface Builder auf die Header Datei ziehe, fügt XCode (weak) als Argument hinter property an. Ich kenne allerdings nur retain, assign und copy, und standardmässig bei Objekten macht ja (so wie ichs verstanden habe) retain am meisten Sinn. Wieso fügt Xcode weak ein und was bedeutet es?
Objective - C und Cocoa, Praxiseinstieg Programmierung für Mac OS X und iphone, von 2011
Du sagst nix ?Objective - C und Cocoa, Praxiseinstieg Programmierung für Mac OS X und iphone, von 2011
Ich sage zu dem Buch nichts. Es sagt dir auch nichts.
Bist du noch in der Widerrufsfrist?![]()
Du sagst nix, was Du davon hälst? Komm schon, das Eis wird jetzt ganz schön dünnDu sagst nix ?Objective - C und Cocoa, Praxiseinstieg Programmierung für Mac OS X und iphone, von 2011
Ich sage zu dem Buch nichts. Es sagt dir auch nichts.
Bist du noch in der Widerrufsfrist?![]()
Okay, dann formuliere ich es anders: Ich sage nicht das, was ich davon halte.
Das nenn ich mal ne klare Aussage !Nein, ich sage nichts dazu, ich sage nichts dazu.
Ich finde es übrigens gut, dass es einen Verbraucherwiderruf im Internet gibt.
Wurden die passenden Variablen zu einem Property eigentlich schon immer automatisch erzeugt oder ist dies erst seit einer gewissen Xcode-, Compiler- oder SDK Version der Fall?
Wieso sollte man die Ivars nicht mehr im Header deklarieren?
Das ist seit @synthesize der Fall.
Vermutlich kann man dann unter Umgehung der Setter und Getter an die iVars, und das will ja bekanntlich keiner.
Jein
In den ersten Implementierungen hat @synthesize zwar die Ivars angeklebt, aber keinen Bezeichnet dafür herausgerückt. Das führte dazu, dass man in -init und -dealloc die Setter verwenden musste. :-] Einige hat das böse gemacht, so dass jetzt auch Bezeichnet erzeugt werden.
Zum Header: Weil sie da nichts verloren haben. Sie sind ja Implementierungsdetail.
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 |
@interface MyViewController (Private) @property (nonatomic, retain) NSArray *privateArray; @property (nonatomic, retain) NSString *privateString; @end @implementation MyViewController @synthesize privateArray; @synthesize privateString; ... |
|
|
Quellcode |
1 2 3 4 |
- (void)dealloc
{
[ivar release];
}
|
|
|
Quellcode |
1 2 3 4 |
- (void)dealloc
{
self.ivar = nil;
}
|
|
|
Quellcode |
1 2 3 4 5 |
@implementation Somewhat {
// Private ivars
}
…
@end
|
|
|
Quellcode |
1 2 3 4 |
@implementation Somewhat
{
NSString *privateString;
}
|
|
|
Quellcode |
1 2 3 4 |
@implementation Somewhat @property (nonatomic, retain) NSString *privateString; @synthesize privateString; |
Also bei:
![]()
Quellcode
1 2 3 4@implementation Somewhat { NSString *privateString; }
erhalte ich die Fehlermeldung:
3: Inconsistent instance variable specification
Bei:
![]()
Quellcode
1 2 3 4 @implementation Somewhat @property (nonatomic, retain) NSString *privateString; @synthesize privateString;
gibt es die Fehlermeldungen:
3: Property cannot be declared inside @implementation context
4: No declaration of property 'myString' found in the interface
Ich gehe jetzt mal davon aus, dass dies unter Xcode 3.x und dem GCC 4.x noch nicht funktioniert, sondern erst ab Xcode 4.x oder unter Verwendung von LLVM als Compiler zur Verfügung steht, richtig?