Junior — Middle
Նկարագրեք ամենաբարդ խնդիրը սխալի հետ, որի հետ եք բախվել, և ինչպես եք այն լուծել
sobes.tech AI
Պատասխան AI-ից
Swift-դուրս ցիկլային հղումների պատճառով հիշողության սոսինձների հետ կապված խնդիրներից մեկը կար, որը ես հանդիպեցի: Մի նախագծում, հավելվածը անակնկալ սկսեց շատ դանդաղել և շատ հիշողություն օգտագործել:
Ես օգտագործեցի Xcode-ի Instruments գործիքները՝ Allocations և Leaks պրոֆիլերներով, որպեսզի ճշգրիտ հետևեմ, որտեղ է տեղի ունենում սոսինձը: Հասկացա, որ մի քանի տեղերում փակագծերը բռնում էին self-ին առանց թույլ տված հղումների ([weak self]), ինչը հանգեցնում էր ցիկլային հղումների և օբյեկտների ազատման անհնարինության:
Որոշում՝
- Ամեն տեղ, որտեղ փակագծերը օգտագործում էին
self, ավելացրի[weak self]կամ[unowned self]՝ համատեքստից կախված: - Վերանայեցի օբյեկտների կյանքի ցիկլը և համոզվեցի, որ նրանք ճիշտ ազատվում են:
- Փոփոխություններից հետո կրկին փորձարկեցի հավելվածը Instruments-ով՝ սոսինձներ չգտնվեցին, և կատարողականությունը վերադարձավ նորմալ:
Այս փորձառությունը ինձ սովորեցրեց ուշադիր լինել փակագծերում հղումների բռնման վրա և օգտագործել պրոֆիլավորման գործիքներ՝ բարդ սխալները գտնելու համար: