문제

아래에 나열된대로 nsurlconnection을 사용하고 있습니다. 이 수업에 대해 세 가지 질문이 있습니다. URL 값을 연결하면 디버거 가이 라인을 두 번 누르지 만 그 위의 선은 아닙니다.

if (theConnection){

두 번째로 exc_bad_access를 얻습니다. 첫 번째 URL 할당 (주석)을 사용하는 것은 제대로 작동합니다.

1.) 차이점은 무엇입니까?

- (void)applicationDidFinishLaunching:(UIApplication *)application {

//NSString *url = @"http://www.abc.com/afile.mp4";

NSString *temp = @"afile.mp4";
NSString *url = [@"http://www.abc.com/" stringByAppendingString:temp];

theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] 
                                     cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0];
[url release]; 

NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection) {
    receivedData=[[NSMutableData data] retain];
}

2.) 파일 이름을 afile.mp로 변경하면 요청이 진행되고 [수신자 길이]는 약 1600입니다.

    - (void)connectionDidFinishLoading:(NSURLConnection   *)connection

맞습니다. 수신자가 요청한 실제 데이터가 있는지 정확하게 확인할 수있는 방법이 있습니까? 대상 파일은 약 7MB이지만 1.5MB에서 9MB까지 다양 할 수 있습니다. 내가 요청한 자원은 거기에 없었지만 아무것도 나타내는 것이 있습니까?

3.) 앱 대의원 에서이 작업을 수행하고 있습니다. 유일한 프로토콜은 uiapplicationDelegate입니다. 대의원이없는 경우 모든 nsurlconnection 방법이 어떻게 작동합니까?

도움이 되었습니까?

해결책

1.) 차이점은 무엇입니까?

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    //NSString *url = @"http://www.abc.com/afile.mp4";
    NSString *temp = @"afile.mp4";
    NSString *url = [@"http://www.abc.com/" stringByAppendingString:temp];

    theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] 
                                                                             cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0];
    [url release]; 

차이점은이 중 하나를 사용하면 소유하지 않는 것을 풀어주고 다른 하나는 그렇지 않습니다.

당신은 그것을 할당하거나 복사하거나 유지하지 않았으므로 소유하지 않으므로 해제하지 마십시오.

구현 세부 사항으로 문자열 리터럴은 참조 카운팅을 구현하지 않습니다. 문자열 리터럴 객체는 당신이 그것들을 유지하거나 릴리스하려고 할 때 당신을 무시합니다. 그렇기 때문에 문자열 리터럴을 릴리스하는 버전이 충돌하지 않으며 새 문자열과 릴리스를 생성하는 버전입니다. 그러나 이것은 구현 세부 사항입니다. 항상 소유하지 않은 것을 공개하면 충돌이 발생한다고 가정하십시오.

수신자가 요청한 실제 데이터가 있는지 정확하게 확인할 수있는 방법이 있습니까?

오류 문서와 반대로? 응답 코드를 확인하십시오.

다른 데이터와 달리? 당신은 해시를 사용할 수 있지만, 올바른 해시를 결정하는 방법은 당신에게 달려 있습니다. 그러나 서버가 잘못된 파일을 제공하지 않을 것이라는 믿음을 갖는 것이 더 쉽습니다.

내가 요청한 자원은 거기에 없었지만 아무것도 나타내는 것이 있습니까?

예. 구현하다 connection:didReceiveResponse: 응답 코드를 확인하십시오.

서버가 mod_speling 또는 이와 유사한 것을 사용하는 경우, 예를 들어 실제로 존재하는 "afile.mp4"에 요청한 "afile.mp"를 변경하여 오류를 반환하는 대신 URL을 수정할 수 있습니다.

3.) 앱 대의원 에서이 작업을 수행하고 있습니다. 유일한 프로토콜은 uiapplicationDelegate입니다. 대의원이없는 경우 모든 nsurlconnection 방법이 어떻게 작동합니까?

당신은 말했습니다 delegate:self, 당신은 연결 대의원입니다.

MAC에서 최소한 NSURLConnection은 메소드를 NSObject로 범주되므로 최소한 NO-OP 형식으로 사용할 수 있습니다. 이러한 구현을 무시하므로 NSURLConnection이 연결 대의원 (귀하)을 보낼 때 해당 메시지를 보낼 때 제공 한 구현으로 이동합니다.

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