我有這個代碼單例類:目標C:保留VS ALLOC
manager.h
@interface Manager : NSObject {
NSString *jobsLimit;
NSMutableDictionary *jobTitles;
}
@property (nonatomic, retain) NSString *jobsLimit;
@property (nonatomic, assign) NSMutableDictionary *jobTitles;
@implementation Manager
@synthesize jobsLimit;
@synthesize jobTitles;
+ (id)sharedManager {
@synchronized(self) {
if(shared == nil)
shared = [[super allocWithZone:NULL] init];
}
return shared;
}
- (id)init {
if (self = [super init]) {
jobsLimit = [[NSString alloc] initWithString:@"50"];
jobTitles = [[NSMutableDictionary alloc] init];
}
return self;
}
然後在代碼我指定這些變量是這樣的:
self.jobsLimit = [NSString stringWithFormat:@"%d", progressAsInt];
[self.jobTitles addEntriesFromDictionary:anotherDictionary];
- (void)dealloc {
[super dealloc];
[jobsLimit release];
[jobTitles release];
}
現在我的問題是這段代碼是否正確?分配是否正確?
我很困惑與何時使用alloc和/或保留。如果我的財產已被保留,我是否需要使用alloc?如果我使用分配應該我的財產分配?
會有什麼引用計數現在這些變量並在的dealloc被稱爲才具dealloc'd /下dealloc'd?
也爲單班我是否需要初始化我的ivars如上面的init方法我沒有。
我很感激,如果有人能幫助我清除這種困惑,並提前感謝。
問候,
非常感謝大衛,但現在「[[NSString alloc] ..」中的alloc'd字符串會自動解除分配,因爲jobsLimit指向另一個字符串「[NString stringWith ...」?? ? – mshaaban 2010-12-21 18:55:04