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