Porting properties in a fashion that works in ARC code and in mulle-objc is tricky. It is best if you can restrict yourself to assign, copy and retain.
Property deallocation
In Apple ARC, properties are automatically cleared during -dealloc
. In Apple Manual Retain-Release Mode (MRR)
you have to do it yourself during -dealloc
.
In mulle-objc all properties that reference objects or pointers are cleared during -finalize
by
setting them to 0.
readonly properties - they have no setter - are not cleared. But in mulle-objc they are backed by an ivar.
It is open to discussion if you want to release them in -dealloc
for compatibility or use -finalize
to break
possible retain cycles.
Here is how to write -dealloc
for compatiblity with MMR (also see ARC Porting tips):
#if __has_feature(objc_arc) || defined( __MULLE_OBJC__)
# define PROPERTY_RELEASE( p)
#else
# define PROPERTY_RELEASE( p) [_p release]
#endif
#if __has_feature(objc_arc)
# define SUPER_DEALLOC()
#else
# define SUPER_DEALLOC( p) [super dealloc]
#endif
- (void) dealloc
{
PROPERTY_RELEASE( a)
PROPERTY_RELEASE( b)
PROPERTY_RELEASE( c)
SUPER_DEALLOC()
}
Missing Attributes
atomic
Yup it’s gone. Use locking or the atomic operations provided by mulle-thread.
weak
Use assign instead.
strong
When declaring a property use copy or retain. You usually
use copy for NSValue
, NSDate
, NSNumber
and NSString
arguments,
and retain for everything else.
nullable
One of the strong points of Objective-C is its gracious handling of
nil
values, which simplifies coding a lot. Remember that messaging nil
also produces nil
. With the introduction of nonnull
nullable
was
also introduced. It is superflous.
You can easily get rid of nullable
compile errors with:
#define nullable
nil
means you are optimizing
your code for the error case. Use nonnull sparingly. If a nil
parameter
has no ill effect, don’t mark the code nonnull.unsafe_unretained
Use assign instead.
class
Remove the property. Use static
variables in your @implementation
then write and declare +
accessors for them.
class
is likely to make a comeback in a future version.