@interface SpotifyTrack : NSObject
@property (nonatomic, strong) NSString *id;
@property (nonatomic, strong) NSString *artist;
@property (nonatomic, strong) NSString *title;
@property (nonatomic, strong) NSURL *thumbnailUrl;
@end
/* Det blir nå automagisk laget settere og gettere */
#import "SpotifyTrack.h"
@implementation SpotifyTrack
@end
#import "Klasse.h"
. Dette gjelder også når du skal definere interfacet (.h) i implementasjonsfila (.m).
SpotifyTrack *track = [[SpotifyTrack alloc] init];
init
benyttes til dette. Eksempler:
[[SpotifyTrack alloc] init]
[[SpotifyTrack alloc] initWithId:@"123" andTitle:@"D-D-Dance"]
@protected
)@interface MyObject : NSObject {
/* Instans variabelen er bare tilgjengelig inne i klassen som deklarerer den */
@private
NSString * ettObjekt;
/* Instans variabelen er tilgjengelig i klassen som
deklarer den og for klasser som arver av den klassen */
@protected
NSString * ettObjekt;
/* Instans variabelen er tilgjengelig for alle */
@public
NSString * ettObjekt;
/* Kun tilgjengelig for klasser som ligger i ett og samme image. */
@package
NSString * ettObjekt;
}
//Metoder og properties puttes inn her
@end
@interface SpotifyTrack : NSObject
@property (nonatomic, strong) NSString *id;
@property (nonatomic, strong) NSString *artist;
@property (nonatomic, strong) NSString *title;
@property (nonatomic, strong) NSURL *thumbnailUrl;
@end
/* Det automagisk laget settere og gettere som kan brukes slik: */
SpotifyTrack *track = [[SpotifyTrack alloc] init];
track.artist = @"The Killers"; // kaller setter
NSLog(@"Artist: %@", track.artist); // kaller getter
Når man bruker @property
for å generere en getter og setter kan man bestemme oppførsel ved hjelp av flere parametre
readonly
lager kun en getter og ikke en setterreadwrite
lager både getter og setter (default)strong
bestemmer at klassen som lager propertien eier instasvariabelen, og styrer minnehåndteringweak
klassen som lager propertien eier ikke instansvariabelen, og styrer derfor ikke minnehåndteringencopy
lager en kopi av instansvariabelen når man bruker setteren som blir generert av @property
assign
setter verdien direkte. Brukes blant annet ofte på primitiveratomic
Default, men bør brukes sjelden da den er tregere. Har tilleggsfunksjonalitet som gjør at man alltid returnerer ett helt objekt når flere tråder snakker med setter og getter
nonatomic
er ikke trådsikker og man kan risikere å få hente instansvariabelen samtidig som noen skriver til den+ (id)alloc /* Allokerer en plass i minne til objektet */
- (id)init /* Gjør initialiseringen som kreves av et objekt for å bli klart */
alloc
kalles først som en klassemetode slik at man allokerer plass til et objekt. Deretter kalles instansmetoden init
.
[[MyObject alloc] init]
// Med to parametere
- (id)initWithId:(NSString *)id andTitle:(NSString *)title;
// Setter med et parameter
- (void)setTitle:(NSString *)title;
// Getter
- (NSString *)title;
SpotifyTrack track = new SpotifyTrack("id", "I'm awsome!");
person.setTitle("I'm awsome!");
String title = track.getTitle();
SpotifyTrack *track = [[SpotifyTrack alloc] initWithId:@"id" andTitle:@"I'm awsome!"];
[track setTitle:@"I'm awsome!"];
NSString *title = [track title];
Objective-C er rimelig verbost når det kommer til metodenavn. Navnene blir en del av metodesignaturen og må brukes når man kaller på metoden senere.
Metodesignatur (worst case?):- (id)initWithBitmapDataPlanes:(unsigned char **)planes
pixelsWide:(NSInteger)width
pixelsHigh:(NSInteger)height
bitsPerSample:(NSInteger)bps
samplesPerPixel:(NSInteger)spp
hasAlpha:(BOOL)alpha
isPlanar:(BOOL)isPlanar
colorSpaceName:(NSString *)colorSpaceName
bitmapFormat:(NSBitmapFormat)bitmapFormat
bytesPerRow:(NSInteger)rowBytes
bitsPerPixel:(NSInteger)pixelBits
[[NSBitmapImageRep alloc]
initWithBitmapDataPlanes:NULL
pixelsWide:nsRectFrameRect.size.width
pixelsHigh:nsRectFrameRect.size.height
bitsPerSample:8
samplesPerPixel:3
hasAlpha:NO
isPlanar:NO
colorSpaceName:@"NSCalibratedRGBColorSpace"
bytesPerRow:0
bitsPerPixel:0];
[self enInstansmetode];
[MinKlasse enKlasseMetode];
En alternativ måte å kalle tilgangsmetoder (accessor methods, get, set):
NSString *artist = track.artist;
track.title = @"I'm awsome!";
track.artist.firstname = @"Superman";
NSString *artist = [track artist];
[track setTitle:@"I'm awsome!"];
[[track artist] setFirstname:@"Superman"];
[person setAge:25];
setAge:25
setAge:
Subclass : Superclass
syntaks.
// i SpotifyTrack.h. Får SpotifyTrack til å arve fra NSObject
@interface SpotifyTrack : NSObject
@end
NSObject
super
brukes for å sende meldinger til klassen man arver fra. Eks. [super enmetodepåsuperklassen]