In Objective C how do I explicitly release an object owned by another object? Or perhaps equivalently inform the owning object that it does not own the child object anymore. Consider the following:

```
- (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]` an `NSData` object is returned and I assume (due to general conventions of ownership) that it will be released, when `val` is released. This seems acceptable from a non-leaking perspective. But this strategy raises two issues:

1. What if I want to explicitly release `data` object immediately e.g. due to low memory?
2. What if I do not want the caller of `testWithNSString` to be left with an `NSString val` object (after the `testWithNSString` has returned), which suddently has ownership of new objects?