I have a singleton class with this code:
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;
}
Then in the code i'm assigning these variables like this:
 self.jobsLimit = [NSString stringWithFormat:@"%d", progressAsInt];
 [self.jobTitles addEntriesFromDictionary:anotherDictionary];
- (void)dealloc {
    [super dealloc];
    [jobsLimit release];
    [jobTitles release];
}
- Now my question is this code correct? Is the assignment correct? 
- I'm very confused with when to use alloc and/or retain. Do I need to use alloc if my property is already retained? and If I use alloc should my property be assign? 
- What will be the reference count now for these variables and will they be dealloc'd/under-dealloc'd when the dealloc is called? 
- Also for singleton classes do I need to initialize my ivars as in the init method above or I do not have to. 
I'd appreciate if someone can help me clear this confusion out and thanks in advance.
Regards,
 
     
     
     
    