2012-03-01 58 views
0

設置屬性我創建了一個簡單的UIViewController有一個自定義的init方法是這樣的:上分配的UIViewController

-(id)initWithGroupNumber:(NSString *)groupNumber { 
if ((self = [super init]) == nil) { 
    return nil; 
} 
self.levelGroup = groupNumber; 
return self; } 

levelGroup是寫在.h文件

@property (nonatomic, retain) NSString *levelGroup; 

當我打電話屬性以上方法:

LevelsViewController *lvc = [[LevelsViewController alloc]initWithGroupNumber:@"5"]; 

控制器被分配但內部的所有屬性都設置爲零。我不明白爲什麼。

+1

1)除非你使用ARC,'self.levelGroup = [[的NSString的alloc] INIT];'創建一個內存泄漏。 2)你不想做'self.levelGroup = groupNumber;'而不是? 3)「內部所有財產」是什麼意思,只有一個財產? – DarkDust 2012-03-01 18:39:59

+2

此外,在你的初始化這樣更改代碼:自= [超級初始化] if(self){// Do Stuff} return self; – 2012-03-01 18:43:39

+0

@Raphael艾爾斯:我不同意你的建議,沒有必要改變這種情況。他的解決方案絕對沒問題。它在語義上是正確的,所以沒有理由去改變它。我採用了類似的模式,其優點是節省了縮進級別。如果找到你建議的模式(並且蘋果使用了很多),那就太難看了。 – DarkDust 2012-03-01 19:11:06

回答

2

首先,當你處理有可變型(例如NSMutableString)的子類,使用copy

所以,你的財產應該成爲:

@property (nonatomic, copy) NSString *levelGroup; 

然後,裏面的UIViewController合成屬性

@synthesize levelGroup; 

init做到以下幾點:

-(id)initWithGroupNumber:(NSString *)groupNumber { 

    if (self = [super init]) { 
     levelGroup = [groupNumber copy]; 
    } 
    return self; 
} 

寫在memory management guide你不應該使用self.initdealloc

使用你的財產self.levelGroup獲取或設置值。

記得在dealloc中釋放:

[levelGroup release]; 

希望它能幫助。

2

更換你

self.levelGroup = [[NSString alloc]init]; 

self.levelGroup = groupNumber; // actually uses your init value. 
+0

我的不好,這是我以前的嘗試,我忘了。不幸的是,代碼仍然無法正常工作,甚至取代self.levelGroup = groupNumber .. – Lolloz89 2012-03-01 18:53:38

+0

@ Lolloz89:你'@synthesize'groupNumber? – 2012-03-01 18:56:41

+0

@rokjarc,綜合'levelGroup',不'groupNumber' – QED 2012-03-01 18:57:39

相關問題