Sobes.tech
Junior — Middle

Նկարագրեք ամենաբարդ խնդիրը սխալի հետ, որի հետ եք բախվել, և ինչպես եք այն լուծել

sobes.tech AI

Պատասխան AI-ից

Swift-դուրս ցիկլային հղումների պատճառով հիշողության սոսինձների հետ կապված խնդիրներից մեկը կար, որը ես հանդիպեցի: Մի նախագծում, հավելվածը անակնկալ սկսեց շատ դանդաղել և շատ հիշողություն օգտագործել:

Ես օգտագործեցի Xcode-ի Instruments գործիքները՝ Allocations և Leaks պրոֆիլերներով, որպեսզի ճշգրիտ հետևեմ, որտեղ է տեղի ունենում սոսինձը: Հասկացա, որ մի քանի տեղերում փակագծերը բռնում էին self-ին առանց թույլ տված հղումների ([weak self]), ինչը հանգեցնում էր ցիկլային հղումների և օբյեկտների ազատման անհնարինության:

Որոշում՝

  • Ամեն տեղ, որտեղ փակագծերը օգտագործում էին self, ավելացրի [weak self] կամ [unowned self]՝ համատեքստից կախված:
  • Վերանայեցի օբյեկտների կյանքի ցիկլը և համոզվեցի, որ նրանք ճիշտ ազատվում են:
  • Փոփոխություններից հետո կրկին փորձարկեցի հավելվածը Instruments-ով՝ սոսինձներ չգտնվեցին, և կատարողականությունը վերադարձավ նորմալ:

Այս փորձառությունը ինձ սովորեցրեց ուշադիր լինել փակագծերում հղումների բռնման վրա և օգտագործել պրոֆիլավորման գործիքներ՝ բարդ սխալները գտնելու համար: