Мне нужно немного поработать с приложением Objective-C (обновить его для использования нового API), и, никогда раньше не использовав язык, я немного растерялся.
У меня есть цель-C ++ класс, который реализует интерфейс из моего API, и он используется внутри блока, однако всякий раз, когда к нему обращаются внутри блока, он завершается ошибкой с нарушением прав доступа (EXC_BAD_ACCESS).
Исследование Фюртрера показывает, что никонструкторы для рассматриваемого объекта называются.Он объявляется в содержащейся области и использует модификатор __block.
Чтобы попытаться понять это, я сделал быстрое скретч-приложение и обнаружил, что там происходит то же самое:
class Foo
{
public:
Foo() : value(1) { printf("constructor"); }
void addOne() { ++value; printf("value is %d", value); }
private:
int value;
};
void Bar()
{
Foo foo1; // prints "constructor"
__block Foo foo2; // doesn't print anything
foo1.addOne(); //prints "2"
foo2.addOne(); //prints "1"
}
Кто-нибудь может объяснить, что здесь происходит?Почему не вызывается мой конструктор по умолчанию, и как я могу получить доступ к объекту, если он не был правильно построен?