Я новичок в Objective-C, и мне немного любопытно, как я должен управлять памятью для локальных переменных NSString, приведенных ниже, и связанных переменных экземпляра внутри объекта класса. Код, который у меня есть, отлично работает, но просто любопытно, что касается лучшей практики.Выделение памяти для NSString?
Отредактировано для включения полного кода, ничего особенного, как я уже сказал, мне просто любопытно, если в этом контексте я должен делать alloc/release на объектах NSString.
// MAIN ------------------------------------------------------------------- **
#import <Foundation/Foundation.h>
#import "PlanetClass.h";
int main (int argc, const char * argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *planet_01_Geek;
NSString *planet_02_Geek;
// Create planets
PlanetClass *newPlanet_01 = [[PlanetClass alloc] init];
[newPlanet_01 setGeekName:@"StarWars"];
PlanetClass *newPlanet_02 = [[PlanetClass alloc] init];
[newPlanet_02 setGeekName:@"Dune"];
// Query a planet
planet_01_Geek = [newPlanet_01 geekName];
planet_02_Geek = [newPlanet_02 geekName];
// Print details
NSLog(@"Planet Geek = %@", planet_01_Geek);
NSLog(@"Planet Geek = %@", planet_02_Geek);
// Clean up
[newPlanet_01 release];
[newPlanet_02 release];
[pool drain];
return 0;
}
..
// CLASS HEADER ----------------------------------------------------------- **
#import <Foundation/Foundation.h>
@interface PlanetClass : NSObject {
NSString *geekName;
}
- (NSString*) geekName;
- (void) setGeekName:(NSString*)gName;
@end
// ------------------------------------------------------------------------ **
..
// CLASS BODY ------------------------------------------------------------- **
#import "PlanetClass.h"
@implementation PlanetClass
- (NSString*)geekName {
return geekName;
}
- (void)setGeekName:(NSString*)gName {
geekName = gName;
}
@end
// ------------------------------------------------------------------------ **
Я вижу, мой класс интерфейс, как показано ниже, так что ваше высказывание я должен действительно иметь метод dealloc для класса, который делает а [geekName релиз], я думал, что это мог бы быть освобожден, когда я выпустил объект planetClass (т.е. [newPlanet_01 релиз];) @interface planetClass: NSObject { \t поплавок силы тяжести; \t поплавок масса; \t символ * имя ; \t NSString * geekName; \t } Cheers gary – fuzzygoat
@fuzzygoat - зависит от того, как вы выделили эту строку изначально. Если вы использовали alloc() или что-то подобное, вам нужно его освободить. Если вы назначили его из статической «цитируемой строки», ее не нужно выпускать. –