ObjectiveCeeds › Objective-C: Speicherverwaltung zu Fuß

Objective-C: Speicherverwaltung zu Fuß

Von Manfred Kreß
Eine String Klasse
Seite 3 von 6



Fangen wir mit OCString an: OCString muss folgende Merkmale aufweisen:
  • Wrapper für einen C String.
  • Subklasse von OCObject um das Life Circle Management zu unterstützen.
  • Nach der Initialisierung enthält BAString einen leeren String.
  • Kontrolliert dynamisch die Speicherverwaltung des C Stings.
  • Kopiert einen übergebenen C String in den eigenen Speicher.
  • Speichert die Länge des Strings.
In einem Objective C Interface modelliert:
//
//  OCString.h
//  RetainCount
//
#import <stdio.h>
#import <stdlib.h>
#import "OCObject.h"

/*
	on initialization the object has a "" value, that is a char array with the length of 1, the terminating "0"
	cleanup frees the buffer
	the implementation imports
*/
@interface OCString : OCObject {

	// stores our c-string
	char * _OCCString;

	// stores the length
	int _OCLength;
}
/*
	the setter must copy the string to the recievers buffer.
	it frees the old buffer and allocates a new one.
	it is setting length to a proper value
*/
- (void) setCString: (char *)value;
- (char *) cString;

/*
 returns the length. value is readonly and set when assigning a string
*/
- (int) length;
@end
Implementation:
//
//  BAString.m
//  RetainCount
//

#import "OCString.h"
#import <string.h>

@implementation OCString

- (id) init
{
	self = [super init];
	if (self != nil) {

		_OCCString = malloc( 1 * sizeof(char));
		_OCCString [0] = (char)0;

		_OCLength = strlen( _OCCString);
	}
	return self;
}

- (void)setCString: (char *)value
{
	_OCLength = strlen ( value );

	free(_OCCString);

	_OCCString = malloc( (_OCLength+1) * sizeof(char)); // +1 for the terminating "0"

	strcpy(_OCCString, value);
}

- (char *)cString
{
	return _OCCString;
}

- (int)length
{
	return _OCLength;
}

- (void) cleanup
{
	free(_OCCString);
	[super cleanup];
}
@end
Nun haben wir die erste Subklasse mit unseren Life Circle Management realisiert.

« vorige Seitenächste Seite »