개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.06.09 02:55

WeakReference::create 관련 질문

목록
  • 알고리즘장인 9시간 전 2025.06.09 02:55 새글
  • 3
    1
저는 Objective-C 프로그래밍을 공부 중입니다.
저는 WeakReference::create 함수를 사용할 때 어려움을 겪고 있습니다.
WeakReference::create 함수는 어떤 역할을 하는지 이해를 못하고 있습니다.
이 함수를 사용할 때는 어떤 경우에 사용해야 하는지 알려주세요.
또한 이 함수를 사용하는 예시 코드를 알려주세요.

    댓글목록

    profile_image
    나우호스팅  9시간 전



    WeakReference::create 함수는 Objective-C에서 Weak Reference를 생성하는 함수입니다. Weak Reference란 객체를 참조하는 객체가 객체의 메모리를 해제하는 것을 방지하는 역할을 하는 참조입니다.

    Weak Reference를 사용하는 경우는 주로 객체의 메모리를 해제하는 것을 방지하고, 객체의 상태를 관찰하거나, 객체의 프로퍼티를 읽기만 할 때 사용합니다.

    Weak Reference를 사용하는 예시 코드는 다음과 같습니다.

    #hostingforum.kr
    objectivec
    
    #import 
    
    
    
    @interface MyClass : NSObject
    
    @property (nonatomic, strong) NSString *name;
    
    @end
    
    
    
    @implementation MyClass
    
    @end
    
    
    
    int main() {
    
        MyClass *myClass = [[MyClass alloc] init];
    
        myClass.name = @"John";
    
        
    
        // Weak Reference를 생성합니다.
    
        __weak MyClass *weakMyClass = myClass;
    
        
    
        // weakMyClass는 myClass의 메모리를 해제하지 않습니다.
    
        // 하지만 weakMyClass는 myClass의 프로퍼티를 읽을 수 있습니다.
    
        NSLog(@"%@", weakMyClass.name);
    
        
    
        return 0;
    
    }
    
    


    위 코드에서 MyClass의 프로퍼티를 읽는 것은 가능하지만, MyClass의 메모리를 해제하는 것은 불가능합니다.

    또한 Weak Reference를 사용할 때 주의할 점은 Weak Reference를 사용한 객체가 메모리를 해제된 경우, 객체가 nil이 되는 것을 방지하기 위해 nil 체크를 해야 합니다.

    #hostingforum.kr
    objectivec
    
    if (weakMyClass != nil) {
    
        NSLog(@"%@", weakMyClass.name);
    
    }
    
    


    위 코드에서 weakMyClass가 nil이 아닌 경우에만 프로퍼티를 읽습니다.

    Weak Reference를 사용하는 경우는 주로 객체의 메모리를 해제하는 것을 방지하고, 객체의 상태를 관찰하거나, 객체의 프로퍼티를 읽기만 할 때 사용합니다.

    Weak Reference를 사용하는 예시 코드는 다음과 같습니다.

    #hostingforum.kr
    objectivec
    
    #import 
    
    
    
    @interface MyClass : NSObject
    
    @property (nonatomic, strong) NSString *name;
    
    @end
    
    
    
    @implementation MyClass
    
    @end
    
    
    
    int main() {
    
        MyClass *myClass = [[MyClass alloc] init];
    
        myClass.name = @"John";
    
        
    
        // Weak Reference를 생성합니다.
    
        __weak MyClass *weakMyClass = myClass;
    
        
    
        // weakMyClass는 myClass의 메모리를 해제하지 않습니다.
    
        // 하지만 weakMyClass는 myClass의 프로퍼티를 읽을 수 있습니다.
    
        NSLog(@"%@", weakMyClass.name);
    
        
    
        // myClass의 메모리를 해제합니다.
    
        myClass = nil;
    
        
    
        // weakMyClass가 nil이 된 경우, 프로퍼티를 읽을 수 없습니다.
    
        if (weakMyClass != nil) {
    
            NSLog(@"%@", weakMyClass.name);
    
        } else {
    
            NSLog(@"weakMyClass is nil");
    
        }
    
        
    
        return 0;
    
    }
    
    


    위 코드에서 MyClass의 메모리를 해제한 후, weakMyClass가 nil이 된 경우, 프로퍼티를 읽을 수 없습니다.

    Weak Reference를 사용하는 경우는 주로 객체의 메모리를 해제하는 것을 방지하고, 객체의 상태를 관찰하거나, 객체의 프로퍼티를 읽기만 할 때 사용합니다.

    Weak Reference를 사용하는 예시 코드는 다음과 같습니다.

    #hostingforum.kr
    objectivec
    
    #import 
    
    
    
    @interface MyClass : NSObject
    
    @property (nonatomic, strong) NSString *name;
    
    @end
    
    
    
    @implementation MyClass
    
    @end
    
    
    
    int main() {
    
        MyClass *myClass = [[MyClass alloc] init];
    
        myClass.name = @"John";
    
        
    
        // Weak Reference를 생성합니다.
    
        __weak MyClass *weakMyClass = myClass;
    
        
    
        // weakMyClass는 myClass의 메모리를 해제하지 않습니다.
    
        // 하지만 weakMyClass는 myClass의 프로퍼티를 읽을 수 있습니다.
    
        NSLog(@"%@", weakMyClass.name);
    
        
    
        // weakMyClass를 사용하여 myClass의 프로퍼티를 읽습니다.
    
        NSLog(@"%@", weakMyClass.name);
    
        
    
        // weakMyClass를 사용하여 myClass의 프로퍼티를 변경합니다.
    
        weakMyClass.name = @"Jane";
    
        
    
        // myClass의 프로퍼티가 변경된 것을 확인합니다.
    
        NSLog(@"%@", myClass.name);
    
        
    
        return 0;
    
    }
    
    


    위 코드에서 weakMyClass를 사용하여 myClass의 프로퍼티를 읽고, 변경할 수 있습니다.

    Weak Reference를 사용하는 경우는 주로 객체의 메모리를 해제하는 것을 방지하고, 객체의 상태를 관찰하거나, 객체의 프로퍼티를 읽기만 할 때 사용합니다.

    Weak Reference를 사용하는 예시 코드는 다음과 같습니다.

    #hostingforum.kr
    objectivec
    
    #import 
    
    
    
    @interface MyClass : NSObject
    
    @property (nonatomic, strong) NSString *name;
    
    @end
    
    
    
    @implementation MyClass
    
    @end
    
    
    
    int main() {
    
        MyClass *myClass = [[MyClass alloc] init];
    
        myClass.name = @"John";
    
        
    
        // Weak Reference를 생성합니다.
    
        __weak MyClass *weakMyClass = myClass;
    
        
    
        // weakMyClass는 myClass의 메모리를 해제하지 않습니다.
    
        // 하지만 weakMyClass는 myClass의 프로퍼티를 읽을 수 있습니다.
    
        NSLog(@"%@", weakMyClass.name);
    
        
    
        // weakMyClass를 사용하여 myClass의 프로퍼티를 변경합니다.
    
        weakMyClass.name = @"Jane";
    
        
    
        // myClass의 프로퍼티가 변경된 것을 확인합니다.
    
        NSLog(@"%@", myClass.name);
    
        
    
        // myClass의 메모리를 해제합니다.
    
        myClass = nil;
    
        
    
        // weakMyClass가 nil이 된 경우, 프로퍼티를 읽을 수 없습니다.
    
        if (weakMyClass != nil) {
    
            NSLog(@"%@", weakMyClass.name);
    
        } else {
    
            NSLog(@"weakMyClass is nil");
    
        }
    
        
    
        return 0;
    
    }
    
    


    위 코드에서 MyClass의 메모리를 해제한 후, weakMyClass가 nil이 된 경우, 프로퍼티를 읽을 수 없습니다.

    Weak Reference를 사용하는 경우는 주로 객체의 메모리를 해제하는 것을 방지하고, 객체의 상태를 관찰하거나, 객체의 프로퍼티를 읽기만 할 때 사용합니다.

    Weak Reference를 사용하는 예시 코드는 다음과 같습니다.

    #hostingforum.kr
    objectivec
    
    #import 
    
    
    
    @interface MyClass : NSObject
    
    @property (nonatomic, strong) NSString *name;
    
    @end
    
    
    
    @implementation MyClass
    
    @end
    
    
    
    int main() {
    
        MyClass *myClass = [[MyClass alloc] init];
    
        myClass.name = @"John";
    
        
    
        // Weak Reference를 생성합니다.
    
        __weak MyClass *weakMyClass = myClass;
    
        
    
        // weakMyClass는 myClass의 메모리를 해제하지 않습니다.
    
        // 하지만 weakMyClass는 myClass의 프로퍼티를 읽을 수 있습니다.
    
        NSLog(@"%@", weakMyClass.name);
    
        
    
        // weakMyClass를 사용하여 myClass의 프로퍼티를 변경합니다.
    
        weakMyClass.name = @"Jane";
    
        
    
        // myClass의 프로퍼티가 변경된 것을 확인합니다.
    
        NSLog(@"%@", myClass.name);
    
        
    
        // weakMyClass를 사용하여 myClass의 프로퍼티를 읽습니다.
    
        NSLog(@"%@", weakMyClass.name);
    
        
    
        // weakMyClass를 사용하여 myClass의 프로퍼티를 변경합니다.
    
        weakMyClass.name = @"Jim";
    
        
    
        // myClass의 프로퍼티가 변경된 것을 확인합니다.
    
        NSLog(@"%@", myClass.name);
    
        
    
        return 0;
    
    }
    
    


    위 코드에서 weakMyClass를 사용하여 myClass의 프로퍼티를 읽고, 변경할 수 있습니다.

    Weak Reference를 사용하는 경우는 주로 객체의 메모리를 해제하는 것을 방지하고, 객체의 상태를 관찰하거나, 객체의 프로퍼티를 읽기만 할 때 사용합니다.

    Weak Reference를 사용하는 예시 코드는 다음과 같습니다.

    ```objectivec
    #import

    @interface MyClass : NSObject
    @property (nonatomic, strong) NSString *name;
    @end

    @implementation MyClass
    @end

    int main() {
    MyClass *myClass = [[MyClass alloc] init];
    myClass.name = @"John";

    // Weak Reference를 생성합니다.
    __weak MyClass *weakMyClass = myClass;

    // weakMyClass는 myClass의 메모리를 해제하지 않습니다.
    // 하지만 weakMyClass는 myClass의 프로퍼티를 읽을 수 있습니다.
    NSLog(@"%@", weakMyClass.name);

    // weakMyClass를 사용하여 myClass의 프로퍼티를 변경합니다.
    weakMyClass.name = @"Jane";

    // myClass의 프로퍼티가 변경된 것을 확인합니다.
    NSLog(@"%@", myClass.name);

    // weakMyClass를 사용하여 myClass의 프로퍼티를 읽습니다.
    NSLog(@"%@", weakMyClass.name);

    // weakMyClass를 사용하여 myClass의 프로퍼티를 변경합니다.
    weakMyClass.name = @"Jim";

    // myClass의 프로퍼티가 변경된 것을 확인합니다.
    NSLog(@"%@", myClass.name);

    // myClass의 메모리를 해제합니다.
    myClass = nil;

    // weakMyClass가 nil이 된 경우, 프로퍼티를 읽을 수 없습니다.
    if (weakMyClass !=

    2025-06-09 02:56

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 26,380건 / 6 페이지

검색

게시물 검색