js' blog

Fast Enumerations
Created: 03.01.2010 21:24 UTC

So, ich hab heute mal Fast Enumerations in ObjFW implementiert. Das ganze läuft auch mit clang unter Nicht-Apple-Systemen ohne Probleme und wird dann im 0.2er-Release drin sein. Ich gehe davon aus, daß in 0.2 dann wohl kompletter ObjC 2.0-Support sein wird. Es ist übrigens rein optional, sodaß man ObjFW auch nach wie vor mit gcc bauen kann. Man kann sogar ObjFW mit gcc bauen und hat nachher Support für Fast Enumerations drin, kann sie aber eben nicht in seinen Anwendungen nutzen, wenn man die mit gcc baut.

Natürlich kann ich mir ein Beispiel, wie viel schöner doch einiges mit Fast Enumerations ist, nicht verkneifen ;). Daher hier erstmal, wie man es ohne Fast Enumerations machen würde:

id *objs = [array cArray];
size_t count = [array count];

for (i = 0; i < count; i++)
	[objs[i] foo];

Und so viel schöner sieht das ganze dann mit Fast Enumerations aus:

for (id obj in array)
	[obj foo];

Deutlich schöner, oder? Und von so Sachen wie in ner Schleife -[objectAtIndex:] nutzen will ich garnicht erst reden - das ist nicht nur hässlich, sondern auch noch lahm, aber wurde früher von Cocoa-Programmierern oft gemacht. Mit Fast Enumerations steht also jetzt was zur Verfügung, das schnell und schön ist :).

Es wäre übrigens gut, wenn ein paar Leute einfach mal die neuste Version aus dem Mercurial-Repository auschecken könnten und damit rumspielen würden :). In 0.1 sind mir nämlich ein paar Bugs aufgefallen (fehlendes retain + autorelease, falscher Range Check), die leider niemand reported hat, sowas will ich bei 0.2 verhindern (daher kommt die Tage auch ein 0.1.1)…