私はObjective-Cを新しくしました。私は、以下に示すローカルのNSString変数とクラスオブジェクト内の関連するインスタンス変数のメモリをどのように管理する必要があるのか少し不思議です。私のコードはうまく動作しますが、ベストプラクティスについては興味があります。NSString用にメモリを割り当てていますか?
完全なコードを含めるように編集しましたが、この文脈ではNSStringオブジェクトに対してalloc/releaseを実行する必要があるかどうかは不思議です。
// 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
// ------------------------------------------------------------------------ **
..あなたが設定 "geekName" の性質を持っているかに依存するであろう
// 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のchar *名; \t NSString * geekName; \t } 乾杯ゲーリー – fuzzygoat
@fuzzygoat - その文字列を元々どのように割り当てたかによって異なります。 alloc()やそれに類するものを使用した場合は、それを解放する必要があります。静的な "引用符付きの文字列"から割り当てた場合、解放する必要はありません。 –