Почему метод с выделением памяти может быть ненулевым в ObjC?
nonnull
ключевое слово, которое помечает параметр или возвращаемое значение, может / не будет нулевым.
Некоторые методы, такие как [NSString stringWithFormat:]
, [NSArray arrayByAddingObject:]
Также отмечены, что они не будут возвращать ноль.
Но как ни странно, это определенно то, что выделение памяти необходимо внутри их реализации. Например,
NSString
необходимо выделить память для новой объединенной строки из формата.NSArray
необходимо выделить память для новых заполнителей для хранения новых элементов.
Как они могут быть ненулевыми? что означает, что выделение памяти никогда не будет неудачным?
Кроме того, типичный синглтон в ObjC реализован следующим образом:
@implementation MyManager
+ (id)sharedManager {
static MyManager *sharedMyManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedMyManager = [[self alloc] init];
});
return sharedMyManager;
}
@end
Смотрите, что мы никогда не беспокоимся о возвращаемом значении [[self alloc] init]
, Это будет ноль? Или мы просто пишем код для нашего удобства и оставляем там редкую ошибку?