27.3.06

Suche Modell mit persistenten Eigenschaften

Ich habe grade versucht an das model meiner Anwendung eine neue Abfrage (auf Apple-Entwicklersprech: NSFetchRequest) anzuhaengen. Das funktioniert zwar zur Laufzeit recht dauerhaft, aber leider dann doch nicht wirklich persistent. Irgendwie hatte ich erwartet nach der letzten Codezeile das ganze so dauerhaft gespeichert zu haben das es auch im Data Model Tool sichtbar ist. Leider nicht. Sehr schade.


- (IBAction) einSuchtest:(id)sender
{
NSManagedObjectModel *model = [self managedObjectModel];
NSFetchRequest *requestTemplate = [[NSFetchRequest alloc] init];

NSEntityDescription *publicationEntity =
[[model entitiesByName] objectForKey:@"Mitarbeiter"];

[requestTemplate setEntity:publicationEntity];

NSPredicate *predicateTemplate = [NSPredicate predicateWithFormat:
@"name LIKE[c] 'Scheff*'";

[requestTemplate setPredicate:predicateTemplate];

[model setFetchRequestTemplate:requestTemplate forName:@"MeineSuche"];
}

Wie man deprimiert ist...

24.3.06

Promille

Wieviel Promille hat wohl mein Finder ?

Das bedeutet also *eg*


The face
Originally uploaded by The Department.

23.3.06

Schmankerl

Beim Klappsenschaffner entdeckt und fuer lustig befunden:

20.3.06

Retaincount

Neulich bin ich beim Versuch die Mechanismen hinter retain und release zu verstehen auf einen seltsamen Effekt gestossen. Eigentlich sollte ein allokiertes Objekt direkt nach seiner Erzeugung einen retaincount von 1 haben, da auch nur eine einzige 'Leine' auf dieses Objekt existiert - sofern nichts weiter als eine Allokation passiert ist. Folgendes Experiment kann das aber leicht widerlegen:


int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

NSNumber *number = [NSNumber numberWithInt:5];
NSLog(@"retaincount:%i", [number retainCount]);
}


Die zu erwartende Ausgabe waere:

2006-03-20 23:08:14.173 versuch2[10287] retaincount:1


Tatsaechlich erhaelt man folgende Ausgabe:

2006-03-20 23:08:14.173 versuch2[10287] retaincount:2


Spielt man mit den Zahlen etwas wird das ganze noch seltsamer. Bis zur Zahl 12 erhaelt man immer einen retaincount von 2 nach der Allokation, danach erhaelt man 1. Ich habe das ganze mal im osxentwicklerforum gepostet. Die Loesung, laut Forum, ist wohl das haeufig verwendete Zahlen (also bis einschliesslich 12) im Framework zur Laufzeit gecacht werden, um schneller zur Verfuegung zu stehen. Eine NSNumber ist ein unveraenderlicher Container, hat man einmal einen erzeugt wird der wohl wiederverwendet. Sowas kann man ja testen - hab ich auch:


int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

NSNumber *number = [NSNumber numberWithInt:5];
NSLog(@"retaincount:%i", [number retainCount]);

NSNumber *number2 = [NSNumber numberWithInt:5];
NSLog(@"retaincount:%i", [number retainCount]);
}


Ergebnis:

2006-03-20 23:12:12.679 versuch2[16536] retaincount:2
2006-03-20 23:12:12.680 versuch2[16536] retaincount:3


Der retaincount erhoeht sich also tatsaechlich mit jeder Allokation eines Objektes mit demselben integer Wert.

Zumindest sind die Appleingenieure sparsam.