Het declareren van instantievariabelen voor iOS-apps vereist dat elke instantie een eigen instantie heeft Daarom worden de instantievariabelen voor elke instantie gemaakt (met andere woorden, elke instantie krijgt een kopie van deze variabelen).
In de klasse PostfixCalculator zijn de instantievariabelen
-
-uitdrukking, wat (een verwijzing naar) een NSString-object
-
calculatorStack, dat (ook een aanwijzer) is naar een StackOfInteger-object
Het bereik van een variabele definieert waar het kan zijn Er zijn vier opties:
-
beschermd: instantievariabelen zijn zichtbaar en kunnen rechtstreeks worden doorverwezen (dat wil zeggen, gebruikt) in alle instantiemethoden van een klasse en eventuele subklassen.
beschermd is de standaardscope. > privé: deze variabelen worden alleen gebruikt in de klasse die ze heeft gedefinieerd.
-
openbaar: deze variabelen zijn zichtbaar voor en kunnen ons zijn ed in een andere klasse of methode.
-
-
Bekijk een voorbeeld van PostfixCalculator:
@interface PostfixCalculator: NSObject {@ public NSString * expression; @private StackOfInteger * calculatorStack;} -d
Hier wordt expressie als een openbare instantievariabele gedeclareerd, terwijl calculatorStack als privé wordt verklaard.
Laat elke variabele als beschermd en schrijf accessor-methoden voor de variabelen die u buiten de klassenhiërarchie zichtbaar wilt maken.
-
De toegang nog beter beheren:
-
Expliciet declareren als privé.
-
Lever accessor-methoden voor de variabelen die u buiten de klas toegankelijk wilt maken.
-
Blijf indien mogelijk weg van het annoteren van variabelen als openbaar en pakket.
Overigens gebruikt u voor het benaderen van een instantievariabele in openbare scope de aanwijzer naar lidoperator (ook wel de arrow-operator ->). Stel dat de variabele expressie in de PostfixCalculator-interface als volgt wordt gedeclareerd:
-
@public NSString * -expressie;
U krijgt er als volgt toegang toe:
myExpression = myCalculator-> expressie;
Aan de andere kant, als de variabele wordt gedeclareerd als privé (of de standaardwaarde van protected), moet u een accessor-methode gebruiken om de waarde ervan te verkrijgen, zoals hier wordt weergegeven:
NSString * myExpression = [myCalculator getExpression];
Sommige Objective-C-compilers, zoals de huidige gcc-compiler op de Mac, implementeren nog geen privébereik.In plaats daarvan genereren ze alleen een waarschuwing als u een variabele gebruikt die als privé is gedeclareerd buiten de klasse waarin deze is gedeclareerd. De waarschuwing lijkt op de volgende:
-waarschuwing: instantievariabele … is @private; dit zal in de toekomst een zware fout zijn.
Aan de andere kant doet de compiler in Xcode het goede en zegt: Instance variable … is private.
