문제

C#에서는 다음과 같은 진술을 사용 할 수 있습니다.

using (SqlConnection connection = new SqlConnection("connectionString"))
{
    ...
}

이렇게하면 연결 객체가 범위를 벗어나면 폐기되도록합니다. Objective-C 내 에서이 작업을 수행 할 수있는 방법이 있는지 궁금합니다. 기본적으로 여러 소켓을 열어 두는 연결 풀이 있습니다. 사용할 때마다 연결을 열고 닫을 필요가있는 대신 연결 풀에 담그거나 열린 연결을 잡거나 필요한 경우 새 제품을 만들 수 있습니다. 내가 완료되면 연결을 수영장으로 다시 놓으십시오. 내 목표 C 코드는 현재 다음과 같습니다.

MyConnection * connection = [ConnectionPool ConnectionWithDetails: @"host/server/port/etc"];
[connection doSomething];
[ConnectionPool ReleaseConnection: connection];

그래서 어떤 이유로 든 ReleaseConnection 호출되지 않으면 연결이 매달려 있습니다 (결국에는 해방 될 것이지만 내 수영장으로 돌아 가지 않습니다).

기본적으로 저는 전화 요구 사항을 제거 할 수있는 방법을 찾고 있습니다. ReleaseConnection. 나는 약간의 연구를 해왔지만 지금까지 나는 건조 해졌다.

도움이 되었습니까?

해결책

물론, 당신은 a를 사용할 수 있습니다 @try-@catch-@finally 블록, @catch 생략.

MyConnection * connection = [ConnectionPool ConnectionWithDetails: @"host/server/port/etc"];
@try {
    [connection doSomething];
}
@finally {
    [ConnectionPool ReleaseConnection: connection];
}

당신이 어떻게 종료하든 상관 없습니다 @try 블록, @finally 블록이 실행됩니다.

다른 팁

블록 사용을 고려할 수 있으므로 연결을 작성하고 사용하는 대신 블록을 연결 풀에 제출합니다. 풀은 적절한 시간에 블록을 실행하고 필요한 매개 변수 (연결)를 전달합니다. 블록이 완료되면 풀이 필요에 따라 정리할 수 있습니다.

DoSomething 메소드를 작성하는 경우 [ConnectionPool ReleaseConnection : Connection]로 호출 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top