ARC steht für Automatic Reference Counting und soll Objektive-C-Neulingen (wie mir) den Einstieg in die Anwendungsentwicklung in der MAC-Welt (MAC OS X & IOS) erleichtern.
Im Grunde genommen geht es dabei darum, dass der Compiler wohl einige Schritte zum Speichermanagement selber in den kompilierten Code einfügt. Da ist es dann hinderlich, wenn eben derartige Dinge vom Programmierer noch manuell im Sourcecode eingebaut werden.
Gerade der Einsteiger greift natürlich auf Internetfunde wie Beispielcode, Tutorials und Bücher zurück, in denen ARC noch kein Thema war. Was ist also zu tun, wenn man mit einer Version >= 4 von XCode arbeitet und hier bei neu erstellten Projekten ARC zu so merkwürdigen Fehlermeldungen führt? Ganz einfach:  Abschalten!

Und so geht es: Projekt markieren (1) Reiter Build Settings wählen (2) und hier unter ”Combined” (3) im Abschnitt “Objektive-C Automatic Reference Counting”  (4) von “Yes” auf “No” (5) stellen. Das ist alles …
Allgemein
Ich hatte neulich in einem Projekt zur automatischen Rechnungserkennung (OCR) die Anforderung, dass Texte (Artikelnummern) in Abhängigkeit vom Lieferanten nach Musterzeichenfolgen durchsucht werden sollten und dann mit den erkannten Mustern verschiedene Dinge passieren sollten: Zeichen(ketten) entfernen, abändern oder hinzufügen. Das ganze sollte über ein Benutzerinterface konfigurierter und maximal variabel sein.
Die einfachste und wirklich sehr elegante Lösung bestand in der Schaffung einer entsprechenden Tabelle mit den Stammdaten:
- Lieferantennummer
- Artikelnummer
- Muster-Zeichenfolge
- Erstetzungszeichenfolge
- …
Anschließend habe ich dann einen kleinen Eingriff nach der OCR-Erkennung mit den zu verarbeitenden Zeichenketten vorgenommen. Der Programmieraufwand war an dieser Stelle unter Verwendung der Regulären Ausdrücke in Java (Regex) minimal.
Hier dazu ein Codebeispiel:
import java.util.regex.*;
public class RegexTester {
public static void main(String args[]) {
String sourceString = "12345X67890A12XB123X12";
String patternString = "([0-9])([0-9])([0-9])X";
String replacementString = "$2$3X";
Matcher matcher = Pattern.compile(patternString).matcher(sourceString);
StringBuffer targetString = new StringBuffer();
while (matcher.find())
matcher.appendReplacement(targetString, replacementString);
matcher.appendTail(targetString);
System.out.println(targetString);
}
}
In diesem kleinen Beispiel wird im Quellstring “12345X67890A12XB123X12″ nach denjenigen Stellen gesucht, in denen ein X auf 3 Ziffern folgt. Dieses Suchmuster wird dabei durch diesen Regulären Ausdruck definiert: “([0-9])([0-9])([0-9])X”. Wenn so eine Stelle gefunden wird soll die erste der 3 Ziffern eliminiert werden. Die beiden Folgeziffern und das X sollen hingegen im Ergebnis erhalten bleiben. Diese Vorschrift wird durch diesen Regulären Ausdruck definiert: “$2$3X”.
Die kleine Routine gibt dann das Ergebnis folgerichtig in Zeile 12 aus: “1245X67890A12XB23X12″
Ich bin begeistert, wie leistungsfähig die Regulären Ausdrücke sind und wie leicht die Implementierung in Java zu machen ist.
Allgemein, IT, Software
Java