Saya mendapatkan kesalahan
Variabel tidak dapat ditentukan (tidak ada __block type specifier)
di telepon aPerson = participant;
. Bagaimana saya bisa memastikan blok dapat mengakses aPerson
variabel dan aPerson
variabel dapat dikembalikan?
Person *aPerson = nil;
[participants enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
Person *participant = (Person*)obj;
if ([participant.gender isEqualToString:@"M"]) {
aPerson = participant;
*stop = YES;
}
}];
return aPerson;
__block
diawali dengan dua garis bawah.__block
kesalahan saya hilang, tetapi nilai tidak mempertahankan blok. Bantuan apa pun di siniHanya pengingat akan kesalahan yang saya buat sendiri juga, the
deklarasi harus dilakukan ketika pertama kali mendeklarasikan variabel, yaitu, DI LUAR blok, bukan di dalamnya. Ini harus menyelesaikan masalah yang disebutkan dalam komentar tentang variabel tidak mempertahankan nilainya di luar blok.
sumber
Cukup gunakan
__block
awalan untuk mendeklarasikan dan menetapkan segala jenis variabel di dalam blok.Sebagai contoh:
sumber
Untuk menetapkan variabel di dalam blok yang di luar blok selalu menggunakan __block specifier sebelum variabel itu kode Anda harus seperti ini: -
sumber
sumber
Coba
__weak
jika Anda mendapat peringatan tentang mempertahankan siklus penggunaan lain__block
Sekarang Anda dapat merujuk
weakPerson
objek di dalam blok.sumber
ya blok adalah fungsi yang paling sering digunakan, jadi untuk menghindari siklus retain kita harus menghindari menggunakan variabel kuat, termasuk diri di dalam blok, meskipun menggunakan _weak atau diri kita sendiri.
sumber
Ketika saya melihat kesalahan yang sama, saya mencoba menyelesaikannya seperti:
dan itu bekerja dengan baik
Cukup tambahkan " __block " sebelum Variable.
sumber