当你在服务器上写一个返回复杂类型的方法时(无论是返回值还是Var参数返回),RemObjects框架都将其持久化发送到客户端,然后立即将其释放。
那么如何才能防止该对象自动释放呢?我们可以使用RetainObject方法防止该对象自动释放。如:
RetainObject方法调用完毕后,返回的TUserInfoArray实例将不会自动释放,除非该对象实现了IROObjectRetainer接口,否则需要注意的是在服务器关闭前必须释放该对象。实现IROObjectRetainer接口的类对象将由RemObjects架构管理其生存期。
1
function TChatService.GetLoggedUsers: TUserInfoArray;
2
begin
3
Result := TUserInfoArray.Create;
4
Result.Add;
5
Result.Add;
6
end;
function TChatService.GetLoggedUsers: TUserInfoArray;2
begin3
Result := TUserInfoArray.Create;4
Result.Add;5
Result.Add;6
end;那么如何才能防止该对象自动释放呢?我们可以使用RetainObject方法防止该对象自动释放。如:
1
function TChatService.GetLoggedUsers: TUserInfoArray;
2
begin
3
Result := TUserInfoArray.Create;
4
Result.Add;
5
Result.Add;
6
RetainObject(Result);
7
end;
function TChatService.GetLoggedUsers: TUserInfoArray;2
begin3
Result := TUserInfoArray.Create;4
Result.Add;5
Result.Add;6
RetainObject(Result);7
end;RetainObject方法调用完毕后,返回的TUserInfoArray实例将不会自动释放,除非该对象实现了IROObjectRetainer接口,否则需要注意的是在服务器关闭前必须释放该对象。实现IROObjectRetainer接口的类对象将由RemObjects架构管理其生存期。
posted @ 2008-06-06 15:58 Balsam Pear 阅读(455) 评论(1) 编辑
