Language Versions¶
Note: Versions before Stepstone 4.0 are missing.
Note: In order to solve the confusing versioning scheme of Objective-C, this document uses its own versioning scheme which is similar to the current, extremely vague scheme.
References¶
Compiler release notes for NeXT Releases 3.0 to 3.3
Assembler, linker, etc release notes for Rhapsody 5.0 to Xcode 3.2.1
Objective-C Release Notes (Mac OS X Leopard)
v0.8 - Lowest Common Denominator¶
Availability¶
Compilers¶
Stepstone >= 4.0
Portable Object Compiler
NeXT GCC fork
GCC since around 1992
Clang
Runtimes¶
Stepstone >= 4.0
Portable Object Compiler
NeXT/Apple with 32-bit ABI
Apple with modern ABI
GCC runtime
GNUstep runtime
Available features¶
#import
preprocessor directive@interface
…@end
class declarations@implementation
…@end
class definitions
v0.9 - Categories¶
Availability¶
Compilers¶
NeXT GCC fork (was available sometime before 3.0)
GCC (all versions with documentation on the GCC website)
Clang
Portable Object Compiler
Runtimes¶
NeXT/Apple with 32-bit ABI
Apple with modern ABI
GCC runtime
GNUstep runtime
Portable Object Compiler
New features since v0.8¶
Major feature: Categories
v0.10 - NeXT Release 3.0¶
This release introduces some C99 features.
Availability¶
Compilers¶
NeXT GCC fork >= 3.0 (based on GCC 1.93)
GCC >= 2.0
Clang
Runtimes¶
NeXT/Apple with 32-bit ABI
Apple with modern ABI
GCC runtime
GNUstep runtime
Major new features¶
Protocols
@protocol
…@end
<
…>
syntax for declaring classesNew qualifiers for types that can only be used in protocol declarations:
in
,out
,inout
,bycopy
,oneway
.
Interface variable access control
@public
variables are accessible by anyone@protected
variables are accessible by defining class and subclasses@private
variables are only accessible by the defining classdefault is
@protected
Changes since v0.9¶
Forward declaration of classes (
@class
)#warning
directive to complement#error
__attribute__
:aligned
format
New
@encode
encodings forin
,out
,inout
,bycopy
,oneway
,const
.
v1.0 - Exceptions and synchronization¶
Availability¶
GCC >= 4.0 with
-fobjc-exceptions
command line argumentClang
New features¶
Exceptions
Synchronization
Notes¶
On GCC, you can use the
fobjc-std=objc1
to disable Objective-C 2.0.
References¶
v2.0 - 2007 - Leopard¶
Availability¶
Compilers¶
Xcode >= 3.0
GCC >= 4.6
Clang >= 1.0
Runtimes¶
Apple runtime >= (10.5 Leopard)
GCC runtime >= GCC 4.6
Etoile runtime
GCC runtime with
ObjectiveC2.framework
GNUstep runtime (all versions)
Major new features¶
Garbage collection
Didn’t really take off, was replaced by Automatic Reference Counting
Not supported anywhere anymore
Different from GNUstep garbage collection
Properties
@property
Automatic getter and setter generation
@synthesize
Dot notation
object.count
instead of[object count]
and[object setCount: ]
Non-fragile ivars (requires runtime support)
Fast enumeration
for (id thing in myList)
properties (via the @property, @synthesize and @dynamic keywords), fast enumeration (not available in Objective-C++), attributes for methods (such as deprecated, noreturn, sentinel, format), the unused attribute for method arguments, the @package keyword for instance variables and the @optional and @required keywords in protocols
Resources¶
-
Objective-C has been enhanced with support for properties, fast enumeration, optional methods in protocols, and garbage collection.
-
doesn’t seem relevant
-
Enjoy modern garbage collection, syntax enhancements, runtime performance improvements, and 64-bit support.
v2.1 - 2011 - ARC, Xcode 4.2¶
Availability¶
Compilers¶
Xcode >= 4.2
Clang (upstream) >= 3.0
Apple LLVM Compiler >= 3.0
Runtimes¶
Apple runtime >= (Mac OS X 10.7 / iOS 5)
GNUstep runtime >= 1.6
Major new features¶
ARC, @autoreleasepool
, completely private ivars
Automatic Reference Counting (ARC) and an improved memory model cleanly separating object and C memory.
A migration tool for moving manual retain/release code to ARC
Better support for data hiding, allowing instance variables to be declared in implementation contexts or class extensions
Weak linking support for Objective-C classes
Improved static type checking by inferring the return type of methods such as
+alloc
and-init
.
Resources¶
v2.1.1 - 2012 - Xcode 4.3¶
v2.2 - 2012 - Literals, Xcode 4.4¶
Literals syntax is supported for NSArray, NSDictionary, and NSNumber objects, using the same
@
operator as for NSString literals.Subscripting is enabled for Objective-C containers, including NSDictionary and NSArray. Use the
[ ]
syntax convention.Objective-C
@properties
are synthesized by default when not explicitly implemented.
v2.3 - Xcode 6.3¶
Availability¶
Compilers¶
Xcode >= 6.3
Clang >= 3.6.0
Apple LLVM Compiler >= 6.1.0, clang-602.0.49
Runtime¶
The new features require no runtime support.
New features¶
Nullability specifiers
References¶
v2.3.1 - 2015 - Xcode 7.0¶
Availability¶
Compilers¶
Xcode >= 7.0
Clang >=
Runtime¶
The new features require no runtime support.
New features¶
Nullability specifiers are now
_Nullable
,_Nonnull
, and_Null_unspecified
instead of__nullable
,__nonnull
, and__null_unspecified
Lightweight generics
Kindof types
References¶
Unknown 2.x¶
https://developer.apple.com/library/archive/releasenotes/ObjectiveC/ModernizationObjC/AdoptingModernObjective-C/AdoptingModernObjective-C.html
instancetype
Enumeration macros
Designated initializers