2011-03-22 47 views
0

Objective-C真的很奇怪,我無法得到它的掛鉤... 我有一個NSstring,如果我嘗試失去它的價值重新分配它... 以下是我如何使用它.. 任何人都可以告訴我我做錯了什麼?它的發生在新價值的分配..NSString的問題,它分配給函數參數後失去它的價值

@interface PageViewController : UIViewController { 

    NSString *mystring; 
} 

- (void)viewDidLoad { 

    mystring=[ [NSString alloc] initWithString:@""]; 
} 

-(void) function_definition:(NSString *) param { 
............. 
    mystring=param; 
......... 
} 
+0

PS:如果我嘗試使用該值到另一個類的功能,它最高審計機關超出範圍...... – PartySoft 2011-03-22 22:38:40

+0

您可能需要添加一些更碼;您正在複製指針引用而不是param的值。你在看哪個NSString是失去它的價值?你應該做initWithString:param];如果你想複製param到mystring。 – Suroot 2011-03-22 22:42:37

回答

2

最常見的,你會想,以指定此屬性:

@interface PageViewController : UIViewController { 

    NSString *mystring; 
} 

@property (nonatomic, retain) NSString *mystring; 

然後在您的實現,

@synthesize mystring; 

- (void)dealloc { 
    [mystring release]; 
    [super dealloc]; 
} 

最後,隨時隨地在您的實現,通過設置MyString的值或者:

[self setMystring:@"something"]; 

self.mystring = @"somethingelse"; 

如果你正在分配一個新的字符串,一定要釋放它。它會使用該屬性自動保留。

self.mystring = [[[NSString alloc] initWithString:@"hello"] autorelease]; 

最後,在你的函數:

-(void) function_definition:(NSString *) param { 
............. 
    self.mystring = param; 
......... 
} 
+0

在NSString的屬性定義中,通常使用copy而不是retain。所以它會是:@property(nonatomic,copy)NSString * mystring; – Omar 2011-03-22 22:56:48

0

這不是完全清楚你說「失去其價值」的意思,但我在這裏想問題是內存管理之一 - 你需要do some reading如何可可處理這個,但在這種情況下,你需要做的:

-(void) function_definition:(NSString *) param { 
............. 
    if (mystring != param) { 
     [mystring release]; 
     mystring = [param retain]; 
    } 
......... 
} 
相關問題