![Page 1: Objective C Primer - University of Kentuckycs.uky.edu/~cdu226/teaching/cs485-2017spring/objective-C.pdf · 2017-01-17 · C++ VS. Objective-C • Adds OOP, metaprogramming and generic](https://reader033.vdocuments.us/reader033/viewer/2022041808/5e55d220b4fd4554292f346d/html5/thumbnails/1.jpg)
Objective C Primer
With Slides from Kevin Layer
![Page 2: Objective C Primer - University of Kentuckycs.uky.edu/~cdu226/teaching/cs485-2017spring/objective-C.pdf · 2017-01-17 · C++ VS. Objective-C • Adds OOP, metaprogramming and generic](https://reader033.vdocuments.us/reader033/viewer/2022041808/5e55d220b4fd4554292f346d/html5/thumbnails/2.jpg)
Overview
• Objective-C is an object oriented language. • follows ANSI C style coding with methods from
Smalltalk • There is no formal written standard
– Relies mostly on libraries written by others
• Flexible almost everything is done at runtime. – Dynamic Binding – Dynamic Typing – Dynamic Linking
![Page 3: Objective C Primer - University of Kentuckycs.uky.edu/~cdu226/teaching/cs485-2017spring/objective-C.pdf · 2017-01-17 · C++ VS. Objective-C • Adds OOP, metaprogramming and generic](https://reader033.vdocuments.us/reader033/viewer/2022041808/5e55d220b4fd4554292f346d/html5/thumbnails/3.jpg)
Inventors
• Brad Cox and Tom Love (1981) • Cox thought something like Smalltalk would
be very useful to application developers
• Cox modified a C compiler and by 1983 he had a working Object-oriented extension to C called OOPC.
| rectangles aPoint collisions | rectangles := OrderedCollection with: (Rectangle left: 0 right: 10 top: 100 bottom: 200) with: (Rectangle left: 10 right: 10 top: 110 bottom: 210). aPoint := Point x: 20 y: 20. collisions := rectangles select: [:aRect | aRect containsPoint: aPoint].
![Page 4: Objective C Primer - University of Kentuckycs.uky.edu/~cdu226/teaching/cs485-2017spring/objective-C.pdf · 2017-01-17 · C++ VS. Objective-C • Adds OOP, metaprogramming and generic](https://reader033.vdocuments.us/reader033/viewer/2022041808/5e55d220b4fd4554292f346d/html5/thumbnails/4.jpg)
Development
• 1986: Objective-C (via Stepstone)
• 1988: Steve Jobs obtain a licence for NeXT
• NeXTSTEP
– Objective-C
– Derived from BSD Unix
– Make interface design easier
• 1995: full right from Stepstone
![Page 5: Objective C Primer - University of Kentuckycs.uky.edu/~cdu226/teaching/cs485-2017spring/objective-C.pdf · 2017-01-17 · C++ VS. Objective-C • Adds OOP, metaprogramming and generic](https://reader033.vdocuments.us/reader033/viewer/2022041808/5e55d220b4fd4554292f346d/html5/thumbnails/5.jpg)
OPENSTEP API
• Developed in 1993 by NeXT and Sun • An effort to make NeXTSTEP-like Objective-C
implementation available to other platforms. • In order to be OS independent
– Removed dependency on Mach Kernel – Made low-level data into classes
• Paved the way for Mac OS X, GNUstep
![Page 6: Objective C Primer - University of Kentuckycs.uky.edu/~cdu226/teaching/cs485-2017spring/objective-C.pdf · 2017-01-17 · C++ VS. Objective-C • Adds OOP, metaprogramming and generic](https://reader033.vdocuments.us/reader033/viewer/2022041808/5e55d220b4fd4554292f346d/html5/thumbnails/6.jpg)
Apple and Mac OS X
• NeXT is taken over by Apple in 1996 and put Steve Jobs and his Objective-C libraries to work
• Redesigned Mac OS to use objective-C similar to that of NeXTSTEP
• Developed a collection of libraries named “Cocoa” to aid GUI development
• Release Mac OS X (ten), which was radically different than OS 9, in March 2001
![Page 7: Objective C Primer - University of Kentuckycs.uky.edu/~cdu226/teaching/cs485-2017spring/objective-C.pdf · 2017-01-17 · C++ VS. Objective-C • Adds OOP, metaprogramming and generic](https://reader033.vdocuments.us/reader033/viewer/2022041808/5e55d220b4fd4554292f346d/html5/thumbnails/7.jpg)
The Cocoa API
• Primarily the most frequently used frameworks nowadays.
• Developed by Apple from NeXTSTEP and OPENSTEP
• Has a set of predefined classes and types such as NSnumber, NSstring, Nsdate, etc.
• NS stands for NeXT-sun
• Includes a root class NSObject where words like alloc, retain, and release come from
• For iOS: Cocoa Touch
![Page 8: Objective C Primer - University of Kentuckycs.uky.edu/~cdu226/teaching/cs485-2017spring/objective-C.pdf · 2017-01-17 · C++ VS. Objective-C • Adds OOP, metaprogramming and generic](https://reader033.vdocuments.us/reader033/viewer/2022041808/5e55d220b4fd4554292f346d/html5/thumbnails/8.jpg)
Dynamic Language
• Almost everything is done at runtime
• Uses dynamic typing, linking, and binding
• This allows for greater flexibility
• Minimizes RAM and CPU usage
![Page 9: Objective C Primer - University of Kentuckycs.uky.edu/~cdu226/teaching/cs485-2017spring/objective-C.pdf · 2017-01-17 · C++ VS. Objective-C • Adds OOP, metaprogramming and generic](https://reader033.vdocuments.us/reader033/viewer/2022041808/5e55d220b4fd4554292f346d/html5/thumbnails/9.jpg)
To Import or Include?
• C/C++’s #include will insert head.h into the code even if its been added before.
• Obj-C’s #import checks if head.h has been imported beforehand.
#import head.h
![Page 10: Objective C Primer - University of Kentuckycs.uky.edu/~cdu226/teaching/cs485-2017spring/objective-C.pdf · 2017-01-17 · C++ VS. Objective-C • Adds OOP, metaprogramming and generic](https://reader033.vdocuments.us/reader033/viewer/2022041808/5e55d220b4fd4554292f346d/html5/thumbnails/10.jpg)
Messages
• Almost every object manipulation is done by sending objects a message
• Two words within a set of brackets, the object identifier and the message to send.
• Because of dynamic binding, the message and receiver are joined at runtime
[Identifier message ]
![Page 11: Objective C Primer - University of Kentuckycs.uky.edu/~cdu226/teaching/cs485-2017spring/objective-C.pdf · 2017-01-17 · C++ VS. Objective-C • Adds OOP, metaprogramming and generic](https://reader033.vdocuments.us/reader033/viewer/2022041808/5e55d220b4fd4554292f346d/html5/thumbnails/11.jpg)
Basic syntax structure
C++ syntax
Objective-C syntax
void function(int x, int y, char z);
Object.function(x, y, z);
-(void) function:(int)x, (int)y, (char)z;
[Object function:x, y, z];
![Page 12: Objective C Primer - University of Kentuckycs.uky.edu/~cdu226/teaching/cs485-2017spring/objective-C.pdf · 2017-01-17 · C++ VS. Objective-C • Adds OOP, metaprogramming and generic](https://reader033.vdocuments.us/reader033/viewer/2022041808/5e55d220b4fd4554292f346d/html5/thumbnails/12.jpg)
Keyword: id
• The word ‘id’ indicates an identifier for an object much like a pointer in c++
• This uses dynamic typing
• For example, if Pen is a class…
extern id Pen;
id myPen;
myPen = [Pen new ];
(Cox, 59)
![Page 13: Objective C Primer - University of Kentuckycs.uky.edu/~cdu226/teaching/cs485-2017spring/objective-C.pdf · 2017-01-17 · C++ VS. Objective-C • Adds OOP, metaprogramming and generic](https://reader033.vdocuments.us/reader033/viewer/2022041808/5e55d220b4fd4554292f346d/html5/thumbnails/13.jpg)
Memory Allocation
• Objects are created dynamically through the keyword, “alloc”
• Objects are dynamically deallocated using the words “release” and “autorelease”
• autorelease dealocates the object once it goes out of scope.
• New in iOS: ARC (automatic reference counting)
![Page 14: Objective C Primer - University of Kentuckycs.uky.edu/~cdu226/teaching/cs485-2017spring/objective-C.pdf · 2017-01-17 · C++ VS. Objective-C • Adds OOP, metaprogramming and generic](https://reader033.vdocuments.us/reader033/viewer/2022041808/5e55d220b4fd4554292f346d/html5/thumbnails/14.jpg)
Prototyping functions
• When declaring or implementing functions for a class, they must begin with a + or -
• + indicates a “class method” that can only be used by the class itself.
• - indicates “instance methods” to be used by the client program (public functions).
![Page 15: Objective C Primer - University of Kentuckycs.uky.edu/~cdu226/teaching/cs485-2017spring/objective-C.pdf · 2017-01-17 · C++ VS. Objective-C • Adds OOP, metaprogramming and generic](https://reader033.vdocuments.us/reader033/viewer/2022041808/5e55d220b4fd4554292f346d/html5/thumbnails/15.jpg)
Class Declaration (Interface)
#import <Foundation/Foundation.h>
@interface Person : NSObject {
NSString *_name;
int _age;
}
-(void)setAge:(int)number;
-(void)setName:(NSString * )next;
-(int) age;
-(NSString *) name;
@end
person.h
![Page 16: Objective C Primer - University of Kentuckycs.uky.edu/~cdu226/teaching/cs485-2017spring/objective-C.pdf · 2017-01-17 · C++ VS. Objective-C • Adds OOP, metaprogramming and generic](https://reader033.vdocuments.us/reader033/viewer/2022041808/5e55d220b4fd4554292f346d/html5/thumbnails/16.jpg)
Class Definition (Implementation) #import “person.h”
@implementation Person
-(void)setAge:(int) ageIn
{_age = age;}
-(void)setName:(NSString*) newname {
_name = newname;
}
-(int) age
{return _age;}
-(NSString *) name
{return _name;}
@end
person.m
![Page 17: Objective C Primer - University of Kentuckycs.uky.edu/~cdu226/teaching/cs485-2017spring/objective-C.pdf · 2017-01-17 · C++ VS. Objective-C • Adds OOP, metaprogramming and generic](https://reader033.vdocuments.us/reader033/viewer/2022041808/5e55d220b4fd4554292f346d/html5/thumbnails/17.jpg)
C++ VS. Objective-C
• Adds OOP, metaprogramming and generic programming to C
• Comes with a std library
• Has numerous uses
• Large and complex code for OOP
• Only adds OOP to C
• Has no standard library; is dependant on other libraries
• Mostly used for application building
• Simpler way of handling classes and objects
![Page 18: Objective C Primer - University of Kentuckycs.uky.edu/~cdu226/teaching/cs485-2017spring/objective-C.pdf · 2017-01-17 · C++ VS. Objective-C • Adds OOP, metaprogramming and generic](https://reader033.vdocuments.us/reader033/viewer/2022041808/5e55d220b4fd4554292f346d/html5/thumbnails/18.jpg)
Useful Objects/functions
• NSString @”a string”
• NSLog (like printf) NSLog(“%@ %d”, name, age)
• NSArray NSArray * array = @[@”a”, @”b”];
• NSMutableArray
![Page 19: Objective C Primer - University of Kentuckycs.uky.edu/~cdu226/teaching/cs485-2017spring/objective-C.pdf · 2017-01-17 · C++ VS. Objective-C • Adds OOP, metaprogramming and generic](https://reader033.vdocuments.us/reader033/viewer/2022041808/5e55d220b4fd4554292f346d/html5/thumbnails/19.jpg)
Objective-C 2.0
• In October 2007, Apple Inc. releases Objective-C 2.0 for Mac OS 10.5 (Leopard)
• Adds automatic garbage collection
• Instance Methods (public functions) are defined differently using @property
![Page 20: Objective C Primer - University of Kentuckycs.uky.edu/~cdu226/teaching/cs485-2017spring/objective-C.pdf · 2017-01-17 · C++ VS. Objective-C • Adds OOP, metaprogramming and generic](https://reader033.vdocuments.us/reader033/viewer/2022041808/5e55d220b4fd4554292f346d/html5/thumbnails/20.jpg)
Automatic Reference Counting
• Memory Locations – Stack (frame)
– Heap (all objective-C objects)
• Ownership – local variables
NSString * str = Astring str owns Astring
– instance variables Anobject._str = Astring Anobject owns Astring
![Page 21: Objective C Primer - University of Kentuckycs.uky.edu/~cdu226/teaching/cs485-2017spring/objective-C.pdf · 2017-01-17 · C++ VS. Objective-C • Adds OOP, metaprogramming and generic](https://reader033.vdocuments.us/reader033/viewer/2022041808/5e55d220b4fd4554292f346d/html5/thumbnails/21.jpg)
ARC
• Memory leak: keep an object that has no owner.
• Premature deallocation: free up an object that is still owned by someone
![Page 22: Objective C Primer - University of Kentuckycs.uky.edu/~cdu226/teaching/cs485-2017spring/objective-C.pdf · 2017-01-17 · C++ VS. Objective-C • Adds OOP, metaprogramming and generic](https://reader033.vdocuments.us/reader033/viewer/2022041808/5e55d220b4fd4554292f346d/html5/thumbnails/22.jpg)
Loss of Ownership
• Re-assignment
• Setting the pointer to nil
• The owner is destroyed
• Removing an object from a collection
[items removeObject: item]
![Page 23: Objective C Primer - University of Kentuckycs.uky.edu/~cdu226/teaching/cs485-2017spring/objective-C.pdf · 2017-01-17 · C++ VS. Objective-C • Adds OOP, metaprogramming and generic](https://reader033.vdocuments.us/reader033/viewer/2022041808/5e55d220b4fd4554292f346d/html5/thumbnails/23.jpg)
Strong vs. Weak Reference
• Strong Reference: own the object
• Weak Reference: does not own the object (but just point to it)
– To avoid strong reference cycle
– Define with __weak
• __weak NSString * str;
![Page 24: Objective C Primer - University of Kentuckycs.uky.edu/~cdu226/teaching/cs485-2017spring/objective-C.pdf · 2017-01-17 · C++ VS. Objective-C • Adds OOP, metaprogramming and generic](https://reader033.vdocuments.us/reader033/viewer/2022041808/5e55d220b4fd4554292f346d/html5/thumbnails/24.jpg)
References
• Cox, Brad. Object Oriented Programming: an Evolutioary Approach
• Sebesta, Robert. Concepts of Programming Languages
• Apple Inc. Apple Developer Connection http://developer.apple.com
• Stevenson, Scott. Theocacao http://theocacao.com/document.page/510
• Various Authors. Wikipedia: the Free Encyclopedia http://en.wikipedia.org