ObjectiveCeeds › Objective-C: Private Methoden

Objective-C: Private Methoden

Von Manfred Kreß
Selbstschutz
Seite 3 von 3



Eine kleine Verbesserung muss allerdings unter Umständen noch her. Stellen Sie sich vor, OCClass hätte Delegate Methoden. Diese übergeben ja gerne self an das Delegate. Das wäre natürlich fatal. Denn self darf niemals nach außen gelangen. Also muss auch hier ein Zeiger auf den Proxy übergeben werden. Es wird ein Zeiger auf den eigenen Proxy gespeichert:
@interface OCClass : NSObject {
	
	@private id _OCProxyObject;

}
aber Achtung:
- (id) init
{		
	self = [super init];
	if (self != nil) {
		
		id proxy = [[NSProtocolChecker alloc] initWithTarget: self protocol: @protocol(OCClassPublicProtocol)];
		
		[self release];
		_OCProxyObject = proxy;
		return proxy;
	}
	return nil;
}

proxy darf nicht retained werden. Sonst würden sich Objekt und Proxy gegenseitig retainen und dafür sorgen, das der RetainCount von beiden nie auf Null geht. Also wird der Zeiger auf das Proxyobjekt einfach zugewiesen. Fazit: Es ist durchaus möglich den Zugriff auf Methoden zu verhindern. Auch wenn das in Objective-C nicht "vorgesehen" ist und es keine Syntax in der Sprache dafür gibt. Die Gründe dafür, liegen in der Laufzeitdynamik von Objective-C. Ironischerweise erlaubt uns aber auch genau dieses Laufzeitverhalten, an einem Zentralen Punkt alle Methodenaufrufe zu filtern.

« vorige Seite
Seite: 3 von 3


Objective-C: Private Methoden

Die Praxis
Selbstschutz