Objective Cでは、別のオブジェクトが所有するオブジェクトを明示的に解放するにはどうすればよいですか? あるいは、所有しているオブジェクトに、子オブジェクトをもう所有していないことを同等に通知することもできます。次の点を考慮してください。
- (void) testWithNSString:(NSString *)val
{
NSData *data = [val dataUsingEncoding:NSASCIIStringEncoding];
// ...
// now I want to explicitly release data e.g. due to low memory
}
In[val dataUsingEncoding:NSASCIIStringEncoding]
オブジェクトNSData
が返され、(所有権の一般的な慣習により) が解放されるとオブジェクトが解放されると想定していますval
。これは、漏れのない観点からは許容できるようです。しかし、この戦略には 2 つの問題があります。
data
メモリ不足などの理由でオブジェクトを明示的にすぐに解放したい場合はどうすればよいですか?- (が返された後) の呼び出し元に、突然新しいオブジェクトの所有権を持ったオブジェクト
testWithNSString
が残されないようにしたい場合はどうすればよいですか?NSString val
testWithNSString