Objective-C kan klasse/objectvariabele niet instellen

Ik probeer deze code te laten werken, maar er lijkt geen uitvoer te verschijnen die aangeeft dat de variabelen worden ingesteld:

#import 
#import "thingy.h"

int main (int argc, const char * argv[])
{

@autoreleasepool {

thingy *mythingy;

    [mythingy setMass:75.00];
    [mythingy setTime:5.00];

    NSLog(@"mass of mythingy = %f kg", [mythingy mass]);
    NSLog(@"time of mythingy = %f sec", [mythingy time]);

    }
return 0;
}

dit is de uitvoer die ik krijg:

mass of mythingy = 0.000000 kg
time of mythingy = 0.000000 sec

Ik heb ook geprobeerd de @autoreleasepool (ARC) niet te gebruiken en de code lijkt op de volgende, maar met dezelfde output als hiervoor:

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    thingy *mythingy;

    [mythingy setMass:75.00];
    [mythingy setTime:5.00];

    NSLog(@"mass of mythingy = %f kg", [mythingy mass]);
    NSLog(@"time of mythingy = %f sec", [mythingy time]);

[mythingy release];
[pool drain];

BIJWERKEN:

oké dus ik nam de vorige code en voegde een regel toe het ziet er nu zo uit en werkt, maar is frustrerend omdat ik ARC wil gebruiken !!

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
thingy *mythingy = [[thingy alloc]init];

    [mythingy setMass:75.00];
    [mythingy setTime:5.00];

    NSLog(@"mass of mythingy = %f kg", [mythingy mass]);
    NSLog(@"time of mythingy = %f sec", [mythingy time]);

[mythingy release];
[pool drain];

Uitvoer van deze code:

mass of mythingy = 75.000000 kg
time of mythingy = 5.000000 sec
0

2 antwoord

Je moet een object maken (mythingy) voordat je het kunt gebruiken. Probeer thingy * mythingy; te veranderen in thingy * mythingy = [mythingy new]; of initialiseer het met uw aangepaste methode als u er een hebt geïmplementeerd.

5
toegevoegd
ja het werkt nu, werkt tentally, maar ik wil in staat zijn dat nieuwe automatische referentietelling te gebruiken, ik kan geen goede bron voor dat onderwerp vinden zodat @autoreleasepool kan worden gebruikt en geheugenbeheer kan worden genegeerd (voor eenvoudige projecten )
toegevoegd de auteur Moose, de bron
@jrturton - Ik had wat documentatie (heel kleine hoeveelheid) eerder gelezen en had de indruk dat de ARC inderdaad op magische wijze initialiseert en objecten vrijgeeft. De reden waarom dit een significant geloof in mijn hoofd was, werd verder versterkt door het feit dat wanneer ik ARC heb ingeschakeld en probeer toe te wijzen of te initiëren of vrij te geven of te kopiëren of nieuw, het een fout in mij uitspuugt en zegt dat ik het niet mag om het te doen.
toegevoegd de auteur Moose, de bron
@Mooseman - dit heeft niets te maken met ARC - je moet je object op elke manier toewijzen en initiëren. ARC initialiseert geen magische objecten voor u.
toegevoegd de auteur jrturton, de bron
Dat zou een andere vraag moeten zijn. Als je het hier zou beantwoorden, zou het van het onderwerp af komen. (Iets om u op weg te helpen: stackoverflow.com/questions/6385212/… ) Ook als het werkt, accepteer dan een van de twee antwoorden.
toegevoegd de auteur Jef, de bron

Waar heb je het ding toegewezen?
Je hebt zoiets nodig

mythingy = [[thingy alloc] init];
// or
mythingy = [thingy new];
2
toegevoegd