인스턴스 메소드가 편리한 생성자로 초기화 된 값을 반환하면 해당 객체를 유지 한 다음 반환시 자동 반환을 수행하여 편의 생성자의 autorelease가 발생하면 해당 객체가 자동으로 생성되지 않도록합니다. 개체를 제거하지 마십시오."편의 생성자"를 통해 초기화 된 객체 반환
이 릴리스 설명을 호출 코드 앞에두고 소유권을 가지고 소유권을 가져 오나요?
- (NSStringMutable *)test {
NSMutableString *description = [NSMutableString stringWithString:@"Test Value"];
return description;
}
또는 이렇게해야합니까?
- (NSStringMutable *)test {
NSMutableString *description = [NSMutableString stringWithString:@"Test Value"];
[description retain];
return [description autorelease];
}
호출 코드 :
NSMutableString *testVar = [[NSMutableString alloc] initWithString:[object description]];
+1이 질문에 대한 답변은 – Abizern
맞지만, 카운트 유지에 대해 이야기하는 것을 피하려고합니다. 그들은 빨간색 청어입니다. NSMutableString이 자동 회수 된 객체를 반환 할 것이라는 보장이 없으며, 현재 소유하고 있지 않습니다. 메모리 관리 규칙에 명시 적으로 "해당 메소드가 객체를 호출자에게 안전하게 반환 할 수 있기 때문에"결과를 호출자에게 안전하게 반환 할 수 있습니다. –
좋은 지적입니다. 나는 물건을 설명하는 데 유용 할 보유 수에 관해서 생각한다. 맞습니다. stringWithString은 다른 누군가가 소유 한 객체를 반환한다는 것을 알고 있습니다. 이 경우 NSMutableString이 실제로 객체를 할당했기 때문에 NSMutableString이 그것을 해제해야 할 책임이 있습니다. 그러나 이러한 편의 생성자 (비 초기화 생성자)는 일반적으로 자동으로 릴리즈 된 객체를 반환한다는 인상을 받았습니다. 이런 식으로 행동하지 않은 사람을 만나게되면 놀라실 것입니다. –