On Apr 30, 2017, at 09:46 , Jonathan Schleifer <[email protected]> 
wrote:
> 
> the others do not list nonatomic - making them atomic, which is the default

You and Charles are both right, in a way.

1. What you describe is the original semantics of property atomicity. For some 
reason, the decision was taken to make properties default to “atomic”, but no 
attempt was made to convert any pre-existing getter/setter implementations, and 
no attempt was made to verify that any new custom accessors provided atomicity. 
The whole thing was broken right from the start.

2. Although nothing syntactic has ever changed, common usage has changed over 
the years, to (informally) regard the default (omission of attribute) and 
explicit “atomic” as different things, in terms of API contract. The usage has 
come to be that only properties explicitly marked “atomic” can be reasonably 
assumed to be making an API contract, and that properties without the attribute 
make no API contract (even if they happen to be atomic as an implementation 
detail).

Note that atomic/nonatomic, like strong/weak/etc, have an ambiguous role in 
property declarations. Their actual effect is to guide the code that’s 
generated for a *synthesized* property, and nothing else — they affect nothing 
the compiler does at a call site. At the same time, they’re (informally and 
unreliably) taken as an API contract for users of the property.

What ought to have happened, once Apple realized that this ambiguity existed, 
was to move synthesis-related attributes to the @synthesize statement, and to 
leave attributes on @property statements as “advice” to callers. Instead, Apple 
(inadvisedly, IMO) went in the opposite direction, making @synthesize 
statements optional, and locking the @synthesize-related attributes to the 
@property statement. Hilarity ensued, of which this thread is the most recent 
manifestation.

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Objc-language mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/objc-language/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to