Это очень очень просто, когда вы используете ARC (автоматический подсчет ссылок), компилятор позаботится о подсчете, сколько объектов указывается вашими переменными. Когда счетчик становится равным 0, объект автоматически отменяется. Таким образом, для вещей, которые происходят из низкоуровневой структуры, такой как базовая основа, компилятор не знает, что делать. Таким образом, вы используете BRIDGE, если вы просто хотите сказать компилятору: "игнорируйте этот, я выпущу его, когда мне это понадобится". или перенос бриджа, если вы хотите сказать: «Считайте это объектом и отпустите его, когда ссылка перейдет к 0).
Когда вы делаете это, вы создаете копию, которая при нормальных обстоятельствах должна быть выпущена «CFRelease»:
ABAddressBookCopyArrayOfAllPeople(addressBook)
Однако, добавив это, вы передаете право собственности на объект target-c:
NSArray *allPeople = (__bridge_transfer NSArray*)........
Таким образом, NSArray будет управляться ARC.
Обратите внимание, что, как упоминает JRG, сделать это:
CFRelease(addressBook);
В любом случае не влияет на вновь созданный объект, но вместо этого на оригинальный, который вам все равно придется разблокировать вручную: (Легко сказать, потому что эти методы обычно имеют create или copy ключевых слов в их именах)
Что-то, чего не происходит в вашем коде, но вы должны быть осторожны, это то, что освобождение базовых базовых объектов, которые имеют значение NULL с CFRelease, приведет к ошибке. Как Павел упоминает в своем комментарии.