
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