Все объекты в Objective-C обрабатываются по ссылке (ваши переменные просто хранить адреса, сказать им, где объект существует в памяти).
Так назначить другой объект локальной переменной, влияет только на эту локальную переменную:
+ (void) doSome {
// xx is a local variable... you point it to the address returned
// by [[self sharedInstance] myArray]
//
NSMutableArray *xx = [[self sharedInstance] myArray];
// It's probably nil here since the array was never created.
//
if (xx == nil) {
// Here, you're creating a new object and assigning that object's
// address to your local variable xx... this will have absolutely no
// effect on the return value of [[self sharedInstance] myArray]
// which will keep returning nil.
//
xx = [NSMutableArray array];
}
[xx addObject:@"dfdsf"];
}
Есть несколько решений, вы можете усыновить. Один из них - использовать ленивый инициализатор для вашего массива, например:
// Add this property to your class
@property (nonatomic, strong) NSMutableArray* myArray;
+ (void) doSome {
NSMutableArray *xx = [[self sharedInstance] myArray];
[xx addObject:@"dfdsf"];
}
- (NSMutableArray*)myArray
{
if (!_myArray)
{
_myArray = [NSMutableArray array];
}
return _myArray;
}