Objective-C: Frage zu Instanzen, die nicht im Interface deklariert werden

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Aufgrund der Corona-Krise: Die Veröffentlichung von Stellenangeboten und -gesuchen ist bis 31.12.2021 kostenfrei. Das beinhaltet auch Angebote und Gesuche von und für Freischaffende und Selbstständige.

  • Objective-C: Frage zu Instanzen, die nicht im Interface deklariert werden

    Hallo,


    aus welchem Grunde müssen Instanzen, die in einer Methode erzeugt werden, nicht im Header deklariert werden.
    Geht es nur um die properties, die man im Interface komplett angeben "muss"

    Vielen Dank für eine Antwort

    LG
    T.

    Dieser Beitrag wurde bereits 12 mal editiert, zuletzt von TryNot ()

  • Ich glaube Du verwechselst da einige Begriffe / Konzepte.

    Im Header werden die Interfaces von Klassen definiert.
    Im Interface wird definiert welche Properties eine Instanz (= realisiertes Objekt) haben wird.
    Instanzen werden zur Laufzeit erzeugt (per alloc/init).
    Diese *haben* dann die Properties, die im Interface *deklariert* wurden.
    Dann gibt es noch Verweise (Pointer) auf Instanzen (technisch: auf den Speicherplatz wo die Properties gespeichert sind).
    Diese können in lokalen oder globalen oder temporären Variablen gespeichert werden, wie alle Pointer in C.
    Also ggf. auch selbst wieder in Properties von anderen Objekten. Damit werden Objekte verknüpft.

    Tip: ein gutes Tutorial oder Buch lesen.

    Oder falls ich die Frage völlig missvertanden haben sollte, dann bitte ein konkretes Beispiel angeben "welche Instanzen in welcher Methode wie erzeugt werden die nicht im Header deklariert wurden".
  • ...es geht um Obj-C, sollte ich noch vorausschicken.

    Also:

    Es gibt in .m eine Methode, darin wird eine Instanz erzeugt:

    Quellcode

    1. - (void)setIndexOfCurrentImage {
    2. ...
    3. NSImageView *newImageView = [[[NSImageView alloc] initWithFrame: // ...usw.
    4. ...
    5. }
    In .h ist von *newImageView jedoch an keiner Stelle die Rede.

    Wenn nun alles im Header deklariert werden muss, wo ist da mein Denkfehler?

    (Der Code ist zu finden in Amin Negm Awads Buch zu Objective C, Bd. 2. Projektname Bildershow. (S.471 ff.)
    cocoading.de/Books/
    hoffe aber dass die grundsätzliche Frage so klar wird)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von TryNot ()

    • Im @interface-Bereich der .h-Header-Datei müssen alle Variablen deklariert werden, die von externen Klassen benutzt werden können - wenn die Header-Datei included / imported wird ("public"), also z. B. externe Properties.
    • Im @interface-Bereich der .m-Datei finden sich Variablen, die innerhalb dieser Klasse methodenübergreifend bekannt sind ("private"), z. B. interne Properties.
    • Variablen, die nur innerhalb einer Methode bekannt sein müssen - oder gar in einem untergeordneten Scope, benötigen gar keine Deklaration im Interface, sondern werden i. d. R. am Anfang ihres Gültigkeitsbereiches deklariert.
    Mattes

    P.S.: Man kann auch z. B. ein Property extern als readonly deklarieren und intern dann als readwrite, damit externe Methoden dessen Inhalt nicht verändern können.
    Diese Seite bleibt aus technischen Gründen unbedruckt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von MyMattes ()