<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.scott5.org/index.php?action=history&amp;feed=atom&amp;title=Objective_C</id>
	<title>Objective C - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.scott5.org/index.php?action=history&amp;feed=atom&amp;title=Objective_C"/>
	<link rel="alternate" type="text/html" href="https://wiki.scott5.org/index.php?title=Objective_C&amp;action=history"/>
	<updated>2026-04-12T19:09:16Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://wiki.scott5.org/index.php?title=Objective_C&amp;diff=188&amp;oldid=prev</id>
		<title>Scott: /* Memory management */</title>
		<link rel="alternate" type="text/html" href="https://wiki.scott5.org/index.php?title=Objective_C&amp;diff=188&amp;oldid=prev"/>
		<updated>2011-01-31T23:38:42Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Memory management&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Introduction==&lt;br /&gt;
Objective-C is a strict superset of C.  It adds in the concept of messaging:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;objc&amp;quot;&amp;gt;&lt;br /&gt;
[myArray insertObject:anObject atIndex:0];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File management==&lt;br /&gt;
* &amp;lt;code&amp;gt;.h&amp;lt;/code&amp;gt; is for header files, containing class, type, function, and constant declarations.&lt;br /&gt;
* &amp;lt;code&amp;gt;.m&amp;lt;/code&amp;gt; is for source files, containing implementations.&lt;br /&gt;
* Use &amp;lt;code&amp;gt;#import&amp;lt;/code&amp;gt; to access declarations from other files.&lt;br /&gt;
&lt;br /&gt;
==Memory management==&lt;br /&gt;
If you create a variable of a non-builtin-type (not int or float), then you need to release it when you&amp;#039;re done with it:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;objc&amp;quot;&amp;gt;&lt;br /&gt;
[tempName release];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Call this within scope for a temporary variable, or in the class&amp;#039;s &amp;lt;code&amp;gt;dealloc&amp;lt;/code&amp;gt; method for an instance variable.&lt;br /&gt;
&lt;br /&gt;
== Classes ==&lt;br /&gt;
Interface declaration in MyClass.h:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;objc&amp;quot;&amp;gt;&lt;br /&gt;
#import &amp;quot;MySuperClass.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@interface MyClass : MySuperClass {&lt;br /&gt;
    // instance variables&lt;br /&gt;
}&lt;br /&gt;
+classMethod1;  // void return type&lt;br /&gt;
+(return_type)classMethod2;  // takes no parameter&lt;br /&gt;
+(return_type)classMethod3:(param_type)paramName;&lt;br /&gt;
-(return_type)instanceMethod:(param_type)param1 :(param_type)param2;&lt;br /&gt;
-(return_type)instanceMethodWithNamedParameter:(param_type)param1 namedParameter:(param_type)param2;&lt;br /&gt;
&lt;br /&gt;
@end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another interface declaration in MyOtherClass.h:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;objc&amp;quot;&amp;gt;&lt;br /&gt;
@interface MyOtherClass : NSObject&lt;br /&gt;
{&lt;br /&gt;
    int         count;  // strongly typed&lt;br /&gt;
    id          data;   // weakly typed - allows assignment of an arbitrary object&lt;br /&gt;
    NSString*   name;  // strongly typed&lt;br /&gt;
}&lt;br /&gt;
- (id)initWithString:(NSString*)aName;              // instance method&lt;br /&gt;
+ (MyOtherClass)createWithString:(NSString*)aName;  // class method&lt;br /&gt;
@end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An implementation in MyOtherClass.m:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;objc&amp;quot;&amp;gt;&lt;br /&gt;
@implementation MyOtherClass&lt;br /&gt;
&lt;br /&gt;
- (id)initWithString:(NSString *)aName&lt;br /&gt;
{&lt;br /&gt;
    if (self = [super init]) {&lt;br /&gt;
        name = [aName copy];&lt;br /&gt;
    }&lt;br /&gt;
    return self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
+ (MyOtherClass *)createWithString: (NSString *)aName&lt;br /&gt;
{&lt;br /&gt;
    return [[[self alloc] initWithString:aName] autorelease];&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class properties with getters and setters ==&lt;br /&gt;
In the .h file:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;objc&amp;quot;&amp;gt;&lt;br /&gt;
@property BOOL flag;&lt;br /&gt;
@property (copy) NSString *nameObject;  // Copy the object during assignment.&lt;br /&gt;
@property (readonly) UIView *rootView;  // Declare only a getter method.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Generate the appropriate getters and setters in the .m file with synthesize:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;objc&amp;quot;&amp;gt;&lt;br /&gt;
@synthesize flag, nameObject, rootView;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Strings==&lt;br /&gt;
String literals must be preceded by an @ sign:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;objc&amp;quot;&amp;gt;&lt;br /&gt;
NSString *myString = @&amp;quot;My String\n&amp;quot;;&lt;br /&gt;
NSString *anotherString = [NSString stringWithFormat:@&amp;quot;%d %s&amp;quot;, 1, @&amp;quot;String&amp;quot;];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
http://www.devworld.apple.com/iphone/library/referencelibrary/GettingStarted/Learning_Objective-C_A_Primer/&lt;br /&gt;
&lt;br /&gt;
http://www.devworld.apple.com/iphone/library/documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html&lt;br /&gt;
&lt;br /&gt;
http://www.devworld.apple.com/iphone/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocLanguageSummary.html&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Objective-C&lt;/div&gt;</summary>
		<author><name>Scott</name></author>
	</entry>
</feed>