/ / Има ли модел за справяне с ресурси, които не са свързани с паметта при почистване на ObjC обект? - цел-c, какао

Има ли модел за справяне с ресурси, които не са свързани с паметта при почистване на ObjC обект? - цел-c, какао

Това е обичайно за обекти, които имат някаква държавасвързани с ресурс без памет, за да се осигури метод за изрично "довършване" с този ресурс. Има ли предпочитана обща практика за справяне с казуса, когато се прави опит за делокация на обект, докато е в състояние "използване на моя ресурс"? Виждал съм няколко различни подхода:

  1. че програмистът е допуснал грешка и е казал как да го отстранява (NSLock прави това)
  2. нека обаждащият да избере дали ресурсът се управлява от обаждащия се или се отказва от делокацията (напр. NSFileHandle)
  3. извинете изключение, ако обектът не е в очаквано окончателно състояние, т.е. твърди, че програмистът няма да използва моя обект по този начин
  4. винаги почиствайте по пътя.

Най- Документи в GC потвърдете, че управлението на други ресурси, заедно с управлението на паметта, е лоша идея и (все още) дават пример за извършване на 4, макар и с предупреждения. Така че някой е "избрал" подход, който винаги следва?

Отговори:

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

Тъй като по-голямата част от обектите от какаовата рамка предшестватне може да се направи предположението, че NSFileHandle го прави най-добре.Мисля, че този проблем е един от многото, в които бихме искали да имаме един модел, който да следваме за всеки сценарий и да ни спаси проблемите на избор. За съжаление, не мисля, че това е възможно; ще трябва да определите какво е най-добро за всеки отделен случай.

Ето причини да изберете някоя от опциите си:

  1. Ако автоматичното почистване е сравнително безопасно, но програмата наистина трябва да го направи ръчно.
  2. Ако пишете библиотека и ресурсът може или не може да бъде собственост на вашия обект.
  3. Ако автоматичното почистване не е възможно или по някакъв начин рисковано.
  4. Ако автоматичното почистване е тривиално и не си заслужава да се занимавате с това ръчно.