我是Objective-C的新手,我對如何管理下面顯示的本地NSString變量以及類對象內的相關實例變量的內存有點好奇。我的代碼工作正常,但對最佳實踐感到好奇。爲NSString分配內存?
編輯包括完整的代碼,沒什麼特別的,就像我說我只是好奇,如果在這種情況下,我應該做的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方法的,因爲該班A [geekName釋放];我在想,如果我發佈了planetClass對象時,它可能會被釋放(即[newPlanet_01發行]) @interface PlanetClass:NSObject的{ \t浮法比重; \t浮動質量; \t的char *名稱; \t NSString * geekName; \t } Cheers gary – fuzzygoat 2009-08-27 14:18:03
@fuzzygoat - 取決於您最初如何分配該字符串。如果你使用了alloc()或類似的東西,你需要釋放它。如果你從一個靜態的「帶引號的字符串」分配它,那麼它不需要被釋放。 – 2009-08-27 14:37:18