Имя селектора для литерального конструктора NSArray, например @[]?
Прошло много времени с тех пор, как Clang добавил синтаксис Objective-C для NSDictionary
, NSArray
, NSNumber
, а также BOOL
литералы, как @[object1, object2,]
или же @{key : value}
Я ищу имя селектора, связанного с литералом массива, @[]
,
Я попытался выяснить, используя следующий код для NSArray
, но я не увидел селектор, который казался правильным.
unsigned int methodCount = 0;
Method * methods = class_copyMethodList([NSArray class], &methodCount);
NSMutableArray * nameOfSelector = [NSMutableArray new];
for (int i = 0 ; i < methodCount; i++) {
[nameOfSelector addObject:NSStringFromSelector(method_getName(methods[i]))];
}
2 ответа
@[]
это не метод в NSArray, поэтому вы не найдете его там.
Компилятор просто переводит @[]
в вызов [NSArray arrayWithObjects:count:]
, Как в нем в основном находит все @[]
и заменяет его [NSArray arrayWithObjects:count:]
(несущий через аргументы конечно)
Смотрите раздел Литералы здесь
@[]
использования+arrayWithObjects:count:
Официальная Clang Документация
Массив буквенных выражений расширяется до вызовов
+[NSArray arrayWithObjects:count:]
, который подтверждает, что все объекты не равны нулю. Вариадическая форма,+[NSArray arrayWithObjects:]
использует nil в качестве ограничителя списка аргументов, что может привести к некорректным объектам массива.
Когда вы пишете это:
NSArray *array = @[ first, second, third ];
Это расширяется до этого:
id objects[] = { first, second, third };
NSArray *array = [NSArray arrayWithObjects:objects count:(sizeof(objects) / sizeof(id))];