CS175
Chris Pollett
Sep 3, 2014
@interface classname : superclassname { int my_field; // instance variables can be any C type or the generic id type. } +classMethod1; // + means class method; - means instance method +(return_type)classMethod2; +(return_type)classMethod3:(param1_type)parameter_varName; -(return_type)instanceMethod1:(param1_type)param1_varName :(param2_type)param2_varName; -(return_type)instanceMethod2WithParameter: (param1_type)param1_varName andOtherParameter:(param2_type)param2_varName; @end
To implement the functions you use an implementation file and the syntax:
@implementation classname +classMethod { // implementation } -instanceMethod { // implementation } @end
[obj method:parameter1 paramName2: parameter2]
MyObject * o = [MyObject new]; MyObject * o = [[MyObject alloc] init];You can override the init method of your class to make a new constructor.
// Interface File #import <objc/Object.h> @interface MyHello: Object { int myNumber; int myOtherNumber; } -(void)setNumber:(int) aNumber other:(int) bNumber; -(void)sayHello; @end
// implementation file #import <stdio.h> #import "MyHello.h" @implementation MyHello -(void)setNumber:(int)aNumber other:(int)bNumber { myNumber = aNumber; myOtherNumber = bNumber; } -(void) sayHello { printf("Hello! %d\n", myNumber + myOtherNumber); } -(id) init { //self is like this in Java self = (id)[super init]; if (self) { myNumber = 0; myOtherNumber = 0; } return self; } @end
#import "MyHello.h" int main(void) { MyHello *hello = [[MyHello alloc] init]; //set the number to echo [hello setNumber:10 other:5]; [hello sayHello]; return 0; } /* To compile in gcc could type: gcc -arch i386 -x objective-c -Wno-import main.m MyHello.m -lobjc To get this to work on 64 bit architecture/llvm you need to switch to NSObject ( have at least GNUStep available on non-Macs)... You can actually build XCode projects from the command line: /Developer/usr/bin/xcodebuild -target project */
The point of the above is to see the basics of Objective-C without reference to iOS or OSX, next week we'll go back to looking at the language in the specific context of Apple.