Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Objective-C] NSUInteger versus gewoon de integer gebruiken

Pagina: 1
Acties:

  • AxiMaxi
  • Registratie: December 2000
  • Laatst online: 06-10 14:48
Ben zojuist met Objective-C begonnen, zonder ervaring met C en z'n varianten maar wel met wat kennis van PHP, JavaScript en wat andere taaltjes op zak.
Vanuit een boek zit ik simpele code over te kloppen om zo gewend te raken aan ObjC en diens syntax.
Prima te volgen, maar soms roept het ook wat vragen op.

Zo kom ik deze code tegen:
C:
1
2
3
4
5
6
7
8
9
//Nog wat programma ervoor

NSUInteger dateCount = [dateList count];
        for (int i = 0; i < dateCount; i++) {
            NSDate *d = [dateList objectAtIndex:i];
            NSLog(@"Here is a date: %@", d);
        }

//En nog wat erachteraan


Nu vroeg ik me af: waarom NSUInteger gebruiken en niet gewoon in de for-statement de dateCount vervangen door [dateList count]?
Dat werkt ook (heb ik geprobeerd).

Is dat mooiigheid of dient het een hoger doel?

[Hier had mijn handtekening kunnen staan]


  • Ryur
  • Registratie: December 2007
  • Laatst online: 16:13
AxiMaxi schreef op zondag 09 juni 2013 @ 21:43:
Nu vroeg ik me af: waarom NSUInteger gebruiken en niet gewoon in de for-statement de dateCount vervangen door [dateList count]?
Officieel is [dateList count] een message die je stuurt naar de class waar de variable dateList van is. Dit is een relatief zware operatie; daarom wil je niet iedere keer in de for-loop die zware operatie doen.

En waarom NSUInteger i.p.v. integer; zoals de documentatie zelf al zegt "When building 32-bit applications, NSUInteger is a 32-bit unsigned integer. A 64-bit application treats NSUInteger as a 64-bit unsigned integer".
De NSUInteger is ook ge-typteDEFt aan een long i.p.v. een int.
Voor iOS maakt het niet veel uit, want daar draait toch alles op 1 bit systeem (ik weet zo uit mijn hoofd niet welke), maar zodra je ook MacOSX software gaat maken, maakt het dus veel uit of je 32-bit of 64-bit processor hebt.

(Toevallig zit ik met zo'n probleem op school. Moet in een 'framework' van een docent werken, die geen rekening mee houdt dat studenten op een 64-bit processor zitten te werken. Alle sizes zijn dubbel zo groot bij mij. Moest de compiler even hardcoded op 32-bit zetten, g++ -m32).

Ook oude syntax in je voorbeeld code, voorbeeld nieuwe syntax:
C:
1
2
3
4
5
6
7
8
9
//Nog wat programma ervoor 

NSUInteger dateCount = dateList.count; 
        for (int i = 0; i < dateCount; i++) { 
            NSDate *d = dateList[i]; 
            NSLog(@"Here is a date: %@", d); 
        } 

//En nog wat erachteraan




Welke boek gebruik je om eruit Obj-C te leren? En doe je het gebaseerd op iOS of MacOSX?
Mijn aanrader zou zijn: Ray Wenderlich - iOS Apprentice (geschreven door een Nederlander)

[ Voor 9% gewijzigd door Ryur op 09-06-2013 21:58 ]


  • ZpAz
  • Registratie: September 2005
  • Laatst online: 20:48
NSUIInteger is volgens mij een unsigned integer het zou dus hogere waardes kunnen bevatten dan een NSInteger.

Hoewel
C:
1
unsigned int dateCount = [dateList count];


Ook zou moeten werken.

Het verschil tussen de NSInteger en int is volgens mij hetzelfde als in java Integer vs int. Namelijk dat dat eigenlijk 'container' objecten zijn voor de primitieve types. (De compiler handelt eventuele verschillen zelf af). Het voordeel van deze container objecten is dat je ze bijvoorbeeld kan gebruiken als een key in een dictionairy, of kan opslaan in een NSData object bijvoorbeeld.

Claude: "Domain patterns emerge from iteration, not generation." - Tweakers Time Machine Extension | Chrome : FF


  • GlowMouse
  • Registratie: November 2002
  • Niet online
ZpAz schreef op zondag 09 juni 2013 @ 21:56:
NSUIInteger is volgens mij een unsigned integer het zou dus hogere waardes kunnen bevatten dan een NSInteger.
Dat helpt weinig als i een gewone int is.

  • AxiMaxi
  • Registratie: December 2000
  • Laatst online: 06-10 14:48
Dank Ryur, dat klink idd zeer plausibel.
Moet nog ff wennen aan dat message-gebeuren.

Ik gebruik The Big Nerd Ranch Guido - Objective-C Programming.
(http://www.bol.com/nl/p/o...ramming/1001004008570891/)

Begint qua niveau behoorlijk laag, maar dat maakt het voor mij wel makkelijk om het met andere talen te vergelijken.

[Hier had mijn handtekening kunnen staan]


  • Ryur
  • Registratie: December 2007
  • Laatst online: 16:13
AxiMaxi schreef op zondag 09 juni 2013 @ 22:12:
Ik gebruik The Big Nerd Ranch Guido - Objective-C Programming.
(http://www.bol.com/nl/p/o...ramming/1001004008570891/)

Begint qua niveau behoorlijk laag, maar dat maakt het voor mij wel makkelijk om het met andere talen te vergelijken.
Wel redelijk boek. Heb hem hier ook liggen.
Heel leuk om alleen aan de TAAL te wennen. Maar ik vind het vreselijk om simpel weg commandline based 'apps' te ontwikkelen.

Ik zou zelf de iOS versie van dat boek pakken dan (http://www.bol.com/nl/p/i...00642191/?featuredProduct). Dan leer je EN de taal EN iOS programmeren (gelijk leuke toepassingen om de taal toe te passen).
En als je iets niet helemaal logisch vind, pak je weer even de Obj-C Programming boek erbij.

(Ik ben ook met BNR Guide iOS Programmeren begonnen, ik kwam achter de tutorials van Ray Wenderlich, zie vorig bericht, te 'laat' achter. Nu ben ik al 1 jaar full-time iOS programmeur, dus ook nog 'beginnerling')

  • AxiMaxi
  • Registratie: December 2000
  • Laatst online: 06-10 14:48
Nog even over de code, verderop in het hoofdstuk komen ze met een nog veel kortere manier:
C:
1
2
3
        for (NSDate *d in dateList) {
            NSLog(@"Here is a date: %@", d);
        }


Ik hoef niet direct iOS/apps te maken, vind 't allang leuk om weer 's met wat anders bezig te zijn. Als ik over een weekje of 2 dit boek erdoor gejast heb, pak ik een volgende. Heb ze geleend, weinig keus dus :)

[Hier had mijn handtekening kunnen staan]

Pagina: 1