Что такое ABMultiValueAddValueAndLabel outIdentifier?
Я работал с этим методом AddressBook, и я не понимаю, для чего используется outIdentifier:
bool ABMultiValueAddValueAndLabel (
ABMutableMultiValueRef multiValue,
CFTypeRef value,
CFStringRef label,
ABMultiValueIdentifier *outIdentifier
);
Документы не проясняют для меня вещи:
outIdentifier
Адрес, по которому нужно разместить идентификатор добавленной стоимости. Передайте NULL, чтобы игнорировать идентификатор.
Кто-нибудь знает, для чего используется этот параметр?
Заранее спасибо!
1 ответ
Я провел небольшое исследование по этому поводу, и наполовину удивлен этим странным параметром.
Поэтому я пошел в Xcode, импортировал фреймворк и нашел документацию для ABMultiValueIdentifier. Это оно:
ABMultiValueIdentifier
Определяет многозначные свойства.
typedef int32_t ABMultiValueIdentifier;
Обсуждение См. "Неверный идентификатор многозначного свойства".
Доступность Доступно в iOS 2.0 и более поздних версиях. Объявлено в ABMultiValue.h
Первое, что я заметил, это то, что это типа int32_t
, Это означает, что это действительно указатель на значение (также обратите внимание на *outIdentifier
)
Внизу определение константы, kABMultiValueInvalidIdentifier
, Документация гласит:
Это определение препроцессора идентифицирует многозначное свойство со значениями, тип которых не соответствует объявленному типу.
Эта константа меня смущает, но я чувствую, что outIdentifier может быть указателем на местоположение значения. Возможно, что это способ изменить значения в неизменяемом ABMultiValueRef с помощью указателя на значение. Это также может быть проверка, если вы уже добавили значение.
Как вы уже видели, способ создания ABAddressBookRef заключается в использовании ABAddressBookCreateWithOptions(NULL, nil)
, Параметр NULL зарезервирован, и вам предлагается использовать NULL в документации. Вероятно, это то, что Apple использует для своей внутренней работы. Вполне возможно, что outIdentifier - это еще один секретный параметр, который Apple использует и не хочет, чтобы разработчики.
Однако, так как в этом случае он не говорит "Ограничено", я предполагаю, что этот outIdentifier является указателем на значение, поэтому его можно изменить. Я всегда сдавал ноль, и для стабильности это может быть разумно и для вас. Я никогда не видел, чтобы кто-либо использовал этот параметр с тех пор, как начал использовать адресную книгу.
Я был очень заинтригован, потому что я никогда не думал спросить, для чего это.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ- Я не уверен, что я прав. Это не более чем обоснованное предположение, основанное на том, что я прочитал в документации, и на опыте работы с фреймворком.