/ / блок в блок причини самостоятелно да се запази, __блокиране не работи - цел-c, IOS, блокиране

блок в блок причини самостоятелно да бъдат задържани, __блокиране не работи - цел-c, ios, блок

Добавяне: проблемът се случва, когато копирам блока във функцията: [block copy]

Вече използвам __блок, за да избегна самозадържане. __блок типof (самостоятелно) bself = самостоятелно;

Когато обаче има друг блок в този блок и той използва belves, себе си все пак ще бъде запазен.

Както показва в кода по-долу, първият bself няма да се задържи, както се очаква. Въпреки това, 2-рата собственост ще запази себе си.

            __block typeof(self) bself = self;

[layer start:param1
completeHanlder:^{
bself.xx = localxx;

dispatch_async(dispatch_get_main_queue(), ^(void) {
... ...
[bself something];
});
}
];

някой знае защо?

Отговори:

-1 за отговор № 1

Правите грешно, но концепцията е прав, тук грешката:

__block

Това се използва, за да дадете силна референция във вашия блок. Бихте могли например да промените стойността извън блока си.

Правилният начин е да правите с __weak, който ще получи слаба справка от вашия инстанция и ще предотврати силна циклична линия като тази:

 __weak typeof(self) bself = self;

И тъй като __block, че сте създали задържане и силна справка :)