Obj-C와 Xcode에서 강하고 약한 참조가있는 딜레마가 있습니다. 내가 안으로 서로 상호 참조 두 개의 객체를 생성 할 때, 모든 약한 :Objective-C로 Xcode에서 ARC가 제대로 작동하지 않습니다.
Mouse *mouse = [[Mouse alloc] initWithComputer:nil];
Computer *computer = [[Computer alloc] initWithMouse:mouse];
NSLog(@"%@", computer.mouse); //prints legit address
mouse = nil; //destroy the ONLY strong reference to Mouse
NSLog(@"%@", computer.mouse); //still prints(holds) the same legit address
마우스 전에 = 무기 호;
마우스 후 = 무기 호; Mouse 클래스 마우스, 마우스 computer.mouse가 해제되어야 할 때 여전히 같은 메모리 주소를 보유의 인스턴스에 "파괴"유일한 강한 참조 후
.
는 물론 엑스 코드 만 SWIFT에서 동일한 코드가 제대로 작동하고 메모리가 computer.mouse에 의해 개최되고 할당을 해제 그것을 전무
내를 Obj-C 코드와 아무 잘못인가? 내 Xcode는 최신 버전이지만 이전 버전에서는 Obj-c에서도 운이 없었습니다. 나는 어떤 도움을 주셔서 감사합니다. Computer.h
#import <Foundation/Foundation.h>
@class Mouse;
@interface Computer : NSObject
@property (nonatomic, weak) Mouse *mouse;
- (instancetype) initWithMouse: (Mouse *) userPutMouse ;
@end
Computer.m
#import "Computer.h"
#import "Mouse.h"
@implementation Computer
- (instancetype) initWithMouse: (Mouse *) userPutMouse {
self = [super init];
if (self) {
self.mouse = userPutMouse;
self.mouse.computer = self;
}
return self;
}
@end
Mouse.h
#import <Foundation/Foundation.h>
@class Computer;
@interface Mouse : NSObject
@property (nonatomic, weak) Computer *computer;
- (instancetype) initWithComputer: (Computer *) userPutComputer;
@end
Mouse.m
: 여기
내 클래스입니다#import "Mouse.h"
#import "Computer.h"
@implementation Mouse
- (instancetype) initWithComputer: (Computer *) userPutComputer {
self = [super init];
if (self) {
if (userPutComputer) {
self.computer = userPutComputer;
}
}
return self;
}
@end
대단히 감사합니다! 이제는 분명합니다! – Maxim