Вот как я это вижу:
Типы примитивов (например, целые, вещественные, двойные, расширенные), массивы, наборы, записи: они автоматически уничтожаются при выходе из области видимости.
Типы с подсчетом ссылок (строки, типы интерфейсов, ссылки на интерфейсы): они автоматически уничтожаются, когда их счетчик ссылок равен нулю.
Объекты из классов, которые попадают в одну из этих ситуаций: не наследуются от TComponent, находятся в списке объектов, которые не реализуют владение или являются потомком TComponent, но не имеют назначенного владельца :
- Когда их класс происходит от TInterfacesObject и доступен из ссылки на интерфейс: такое же поведение для типов счетчиков ссылок (см. Выше)
- Другие случаи: вызов Object.Free или FreeAndNil (Object) для его ручного уничтожения (в структуре try..finally было бы еще лучше)
Объекты, которые имеют владельца (потомки TComponent или находятся в списке объектов, реализующих владение): владелец заберет их в нужное время.
Я заметил следующий комментарий от OP:
Я заметил концепцию владельца.
Тем не менее, я не мог передать свой пользовательский класс
метод TTimer.Create () как есть
ожидая TComponent. Почему они
ограничить вещи, которые будут использоваться в формах
только? Разве это не окаменело
плохая привычка ставить логику в свой
виды (формы)?
См., Что потомок TComponent может быть зарегистрирован на паллете, чтобы иметь возможность использовать его во время разработки (например, в форме). Но это не значит, что должен !!
Вы можете передать свой пользовательский класс в TTimer.Create (), если он происходит от TComponent, но вам не нужно создавать его экземпляр во время разработки - или даже принадлежать потомку TForm (если вы хотите управлять его временем жизни, вы даже не нужен владелец!).
Собственность - это механизм, помогающий людям экономить время ...