Frage zu anonymen Kategorien

Chris272

Neues Mitglied
Thread Starter
Dabei seit
31.01.2014
Beiträge
5
Reaktionspunkte
0
Hi,

ich habe gerade angefangen mich ein wenig mit der Entwicklung für iOS zu beschäftigen. Dabei lese ich das Buch "Apps Programmieren für iPhone und iPad". Allerdings verstehe ich das mit den anonymen Kategorien nicht so ganz.

Es wird geschrieben, dass man dort Properties und Methoden definieren kann, auf die man nicht von außen zugreifen kann. Soweit verstehe ich das ja noch. Was ich nicht verstehe:

Wieso soll ich das in eine anonyme Kategorie Packen? Ich kann doch genauso gut meine Attribute in der Implementierungsdatei als private deklarieren und dann kann darauf auch keiner mehr von außen darauf zugreifen?!
Das selbige mit den Methoden, solange die nicht in der Interface-Datei stehen kann ja auch keiner darauf zugreifen oder?

Kann mir jemand bitte eine kurze Erklärung geben? Wäre sehr dankbar :)

Gruß,

Chris
 
andersrum gefragt
warum willst du alles ins Interface packen und da dann als Private deklarieren ?
wenn es eh nicht für die öffentlichkeit gedacht ist.

du hängst ja auch nicht deinen namen an deine Haustür und klebst dann einen aufkleber rauf weil es keiner wissen soll
 
Öhm wieso ins Interface? Ich hab doch geschrieben in die Implementierungsdatei...

Also anstatt:

@interface MeineKlasse()

@property (strong) NSString *test;

@end

@implementation MeineKlasse
@end

so:

@implementation MeineKlasse {

@private
NSString *test;

}
@end

Oder sollte man "Private"-Deklarationen generell in eine anonyme Klasse auslagern?
 
die .h könnte so aussehen
#import <UIKit/UIKit.h>

@interface RootViewController : UIViewController

@end


und die .m könnte so aussehen

#import "RootViewController.h"

@interface RootViewController ()

@property (nonatomic, strong) UIView *view;

@end

@implementation RootViewController

@synthesize view;

//hier könnten nun methoden stehen
@end

in der .h muss nichts stehen was auch nicht nach außen sichtbar sein soll.

wenn du willst das von außen jeder an der property view rumfummeln kann, dann kannst du die property deklaration auch in die. h schreiben (ich mache das eigentlich nie, nur in außnahmefällen wie KVO, ich schreibe dafür selber Getter/Setter) und schreibe dann die Methoden Signaturen der Getter/Setter in die .h)

genau so kannst du eine Methode auch nur in den implentation Teil der .m schreiben , z.B. - (void)faerbeButtonGruen { // hier würde dann Code stehen}
dann ist diese Methode halt nur dort erreichbar.

wenn du aber willst das jeder den button grün färben kann, dann schreibst du die Signatur der Methode - (void)faerbeButtonGruen; in den .h Teil deiner Klasse, dann kann jeder den Button einfärben
 
Ich weiß nicht, aber irgendwie habe ich das Gefühl das wir aneinander vorbeireden...

Meine Frage bezieht sich rein auf die ".m"-Datei. Was du geschrieben hast ist mir schon bewusst.
Allerdings erzeuge ich in der anonymen Kategorie eine Property.
z. B. mit "@property (strong) NSString *theKategorie" habe ich eine nach außen nicht sichtbare Property, die sich wie ein Attribut verhält. Wenn ich jetzt diese Property aber ebenfalls in der ".m"-Datei mit:
@private
NSString *theKategorie;

Dann habe ich ein Attribut, welches nicht in der ".h" steht, nicht nach außen sichtbar ist und nicht den "Overhead" einer Property hat oder?
 
das private ist an der stelle total egal

auch wenn du das private in der implementation nicht schreibst ist es außen nicht sichtbar, wie auch?, sichtbar ist nur was in der .h angegeben wird.
 
So und jetzt nochmal zu meiner Frage:

Es geht nur um die ".m" Datei.
Was ist der Unterschied bzw. was bringt es mir wenn ich eine Property in einer anonymen Klasse mach oder wenn ich ein Attribut deklariere? Mehr will/wollte ich gar nicht wissen :)
 
der Unterschied ist das die property in der Kompletten klasse zugreif bar ist.
deine lokale Variable nur da wo du sie deklarierst

wie gesagt dein private bringt da gar nix und ändert auch nix
 
Ich gebe auf ich glaub wir beide kommen heute nicht mehr zusammen...

Wenn ich in der ".m"-Datei z. B. folgenden Fall habe:

@implementation MeineKlasse
{
NSString *meineVariable;
}

@end

Dann habe ich meine Variable doch auch in der Implementation (.m) deklariert und kann trotzdem mit der ganzen Klasse darauf zugreifen oder?
 
Zurück
Oben Unten