Было - Коротко. Контроль за созданием/освобождением объектов. Только код. №4
Стало:
msWatchedObject.mixin.pas:
msWatchedObjectInstance:
msStringList:
msInterfacedRefcounted:
That's all folks.
"Примеси" - рулят.
Стало:
msWatchedObject.mixin.pas:
{$IfNDef TmsWatchedObject_uses_intf} // interface {$Define TmsWatchedObject_uses_intf} // uses msCoreObjects {$Else TmsWatchedObject_uses_intf} {$IfNDef TmsWatchedObject} // http://programmingmindstream.blogspot.ru/2014/12/generic-2.html {$Define TmsWatchedObject} TmsWatchedObject = class abstract(TmsWatchedObjectParent) // - Класс, который умеет контроллировать создание/уничтожение своих экземпляров public class function NewInstance: TObject; override; // ms-help://embarcadero.rs_xe7/libraries/System.TObject.NewInstance.html procedure FreeInstance; override; // ms-help://embarcadero.rs_xe7/libraries/System.TObject.FreeInstance.html end;//TmsWatchedObject {$Else TmsWatchedObject} // implementation {$IfNDef TmsWatchedObject_uses_impl} // uses SysUtils {$Define TmsWatchedObject_uses_impl} {$Else TmsWatchedObject_uses_impl} // TmsWatchedObject class function TmsWatchedObject.NewInstance: TObject; begin TmsObjectsWatcher.CreateObject(Self, Result); end; procedure TmsWatchedObject.FreeInstance; begin TmsObjectsWatcher.DestroyObject(Self); end; {$EndIf TmsWatchedObject_uses_impl} {$EndIf TmsWatchedObject} {$EndIf TmsWatchedObject_uses_intf}
msWatchedObjectInstance:
unit msWatchedObjectInstance; interface uses {$Include msWatchedObject.mixin.pas} ; type TmsWatchedObjectParent = TObject; {$Include msWatchedObject.mixin.pas} TmsWatchedObjectInstance = class abstract(TmsWatchedObject) end;//TmsWatchedObjectInstance implementation uses {$Include msWatchedObject.mixin.pas} ; {$Include msWatchedObject.mixin.pas} end.
msStringList:
unit msStringList; interface uses {$Include msWatchedObject.mixin.pas} , System.Classes ; type TmsWatchedObjectParent = TStringList; {$Include msWatchedObject.mixin.pas} TmsStringList = class abstract(TmsWatchedObject) // - Класс, который умеет контроллировать создание/уничтожение своих экземпляров end;//TmsStringList implementation uses {$Include msWatchedObject.mixin.pas} ; {$Include msWatchedObject.mixin.pas} end.
msInterfacedRefcounted:
unit msInterfacedRefcounted; interface uses {$Include msWatchedObject.mixin.pas} ; type TmsWatchedObjectParent = TInterfacedObject; {$Include msWatchedObject.mixin.pas} TmsInterfacedRefcounted = class abstract(TmsWatchedObject) // Реализация объектов, реализующих интерфейсы. С ПОДСЧЁТОМ ссылок. // // НЕ САМАЯ хорошая реализация, лучше реализация тут - http://18delphi.blogspot.ru/2013/04/iunknown.html // но в учётом ARC - пользуемся пока "нативной реализаией" // // Таже ещё есть вот что "почитать": // - http://18delphi.blogspot.ru/2013/07/blog-post_3683.html // - http://18delphi.blogspot.ru/2013/07/1.html // - http://18delphi.blogspot.ru/2013/07/2.html // - http://18delphi.blogspot.ru/2013/07/2_18.html // - http://18delphi.blogspot.ru/2013/07/blog-post_8789.html public class function NewInstance: TObject; override; // ms-help://embarcadero.rs_xe7/libraries/System.TObject.NewInstance.html end;//TmsInterfacedRefcounted implementation uses {$Include msWatchedObject.mixin.pas} ; {$Include msWatchedObject.mixin.pas} // TmsInterfacedRefcounted class function TmsInterfacedRefcounted.NewInstance: TObject; begin Result := inherited NewInstance; TmsInterfacedRefcounted(Result).FRefCount := 1; end; end.
That's all folks.
"Примеси" - рулят.
Комментариев нет:
Отправить комментарий