id __weak obj = [[NSObject alloc] init];
The variable obj is qualified with __weak. When the source code is compiled, the compiler shows a warning message.
warning: assigning retained obj to weak variable; obj will bereleased after assignment [-Warc-unsafe-retained-assign] id __weak obj = [[NSObject alloc] init];
If you assign the object to a __strong variable at first, the warning will disappear asfollows.
{
id __strong obj0 = [[NSObject alloc] init];
id __weak obj1 = obj0;
}
Let’s see the source code with comments on ownership status.
{
/*
* You create an object and have ownership.
*/
id __strong obj0 = [[NSObject alloc] init];
/*
* The variable obj0 is qualified with __strong.
* Which means, it has ownership of the object.
*/
id __weak obj1 = obj0;
/*
* variable obj1 has a weak reference of the created object
*/
}
/*
* Leaving the scope of variable obj0, its strong reference disappears.
* The object is released automatically.
* Because no one has ownership, the object is discarded.
*/