SlideShare ist ein Scribd-Unternehmen logo
1 von 94
Downloaden Sie, um offline zu lesen
Introduc)on	
  to	
  Objec)ve-­‐C	
  

             Jussi	
  Pohjolainen	
  
 Tampere	
  University	
  of	
  Applied	
  Sciences	
  
QUICKSTART	
  
Background	
  
•  Objec)ve-­‐C	
  is	
  layered	
  on	
  top	
  of	
  the	
  C	
  –	
  
   language	
  
    –  Based	
  on	
  SmallTalk-­‐80	
  
    –  Designed	
  in	
  early	
  1980s	
  
•  NeXT	
  SoLware	
  licensed	
  Objec)ve-­‐C	
  in	
  1988	
  
•  Apple	
  Computer	
  acquired	
  NeXT	
  in	
  1996	
  
•  Today:	
  na)ve	
  language	
  for	
  developing	
  Mac	
  OS	
  
   X	
  -­‐	
  and	
  iPhone	
  -­‐	
  apps	
  
Class	
  Declara)on:	
  MyPoint.h
Class	
  Implementa)on:	
  MyPoint.m
Test	
  the	
  Class:	
  main.m
Simple	
  makefile	
  
MyPoint : MyPoint.m main.m
  clang -fno-objc-arc -framework foundation
  MyPoint.m main.m -o MyPoint

run :
  ./MyPoint

clean :
  rm MyPoint
Compiling	
  and	
  Running	
  
TB308POHJUS-L-2:point pohjus$ ls -al
total 32
drwxr-xr-x 6 pohjus staff 204 18 Tou 15:32 .
drwxr-xr-x 3 pohjus staff 102 18 Tou 14:52 ..
-rw-r--r--@ 1 pohjus staff 196 18 Tou 15:25 MyPoint.h
-rw-r--r--@ 1 pohjus staff 268 18 Tou 15:23 MyPoint.m
-rw-r--r--@ 1 pohjus staff 339 18 Tou 15:25 main.m
-rw-r--r--@ 1 pohjus staff 120 18 Tou 15:14 makefile
TB308POHJUS-L-2:point pohjus$ make
clang -fno-objc-arc -framework foundation MyPoint.m main.m -o MyPoint
TB308POHJUS-L-2:point pohjus$ make run
./MyPoint
2009-05-18 15:32:46.339 MyPoint[8725:807] X = 0 and Y = 0
2009-05-18 15:32:46.341 MyPoint[8725:807] X = 8 and Y = 7
TB308POHJUS-L-2:point pohjus$
Instan)a)ng	
  an	
  Object	
  
// Declare a pointer to the object
MyPoint* point;

// Allocate memory for the object
point = [MyPoint alloc];

// Initialize the object
point = [point init];
Instan)a)ng	
  an	
  Object:	
  One	
  Liner	
  
// Allocate and initialize the object
MyPoint* point1 = [[MyPoint alloc] init];
Messages	
  (Methods)	
  

           - (void) setX: (int) n;!


        method	
  type:	
          return	
  type	
     selector	
  name	
     argument	
  type	
     argument	
  
   +	
  =	
  class	
  method	
                                 	
                   	
                  name	
  
-­‐	
  =	
  object	
  method	
                                                                            	
  
Messages,	
  with	
  Two	
  Arguments	
  

Declara=on	
  
   - (void) setXAndY: (int) x: (int) y
Usage	
  
   [object setXAndY: 5: 6];
Declara=on,	
  be@er	
  way	
  
   - (void) setX: (int) x andY: (int) y
Usage	
  
   [object setX: 5 andY: 6];
EXERCISES	
  
MEMORY	
  MANAGEMENT	
  AND	
  OBJECT	
  
LIFECYCLE	
  
	
  
Memory	
  Handling	
  in	
  General	
  
•  When	
  allocate	
  something	
  it	
  must	
  be	
  released	
  
    –  Memory	
  consump)on	
  
•  In	
  Java,	
  garbage	
  collector	
  takes	
  care	
  of	
  the	
  
   release.	
  Separate	
  thread	
  looking	
  for	
  objects	
  
   that	
  can	
  be	
  released	
  
•  In	
  Obj-­‐C	
  and	
  C/C++,	
  programmer	
  is	
  
   responsible	
  about	
  the	
  release.	
  
About	
  Pointers	
  
•  int	
  a	
  =	
  5;	
  
      –  Holds	
  one	
  integer	
  value	
  
      –  The	
  integer	
  is	
  stored	
  in	
  some	
  memory	
  address	
  
•  Where?	
  
      –  You	
  can	
  get	
  the	
  memory	
  address	
  by	
  using	
  &	
  in	
  
         front	
  of	
  the	
  variable:	
  &a	
  
Example	
  of	
  Memory	
  Address	
  
int main(int argc, char *argv[])
{
    int a = 5;

    // prints 5
    NSLog(@"%i", a);

    // prints something like 0x7fff5fbff9cc
    NSLog(@"%p", &a);

    return 0;
}
Pointers	
  
•  Pointer	
  is	
  a	
  variable	
  that	
  stores	
  memory	
  
   address	
  
•  int	
  a;	
  
     –  holds	
  integer	
  variable	
  
•  int*	
  b;	
  
     –  holds	
  memory	
  address	
  that	
  points	
  to	
  integer	
  value	
  
•  int*	
  b	
  =	
  &a;	
  
     –  Now	
  b	
  has	
  the	
  memory	
  address	
  of	
  a	
  
Example	
  about	
  Pointers	
  
#import "MyPoint.h"

int main(int   argc, char *argv[])
{
    int a =    5;
    // Store   a's memory address to variable b
    int *b =   &a;

    // prints 5
    NSLog(@"%i", a);

    // prints something like 0x7fff5fbff9cc
    NSLog(@"%p", &a);

    // prints something like 0x7fff5fbff9cc
    NSLog(@"%p", b);

    // prints 5
    NSLog(@"%i", *b);

    return 0;
}
What	
  is	
  the	
  result	
  now?	
  
int main(int   argc, char *argv[])
{
    int a =    5;
    // Store   a's memory address to variable b
    int *b =   &a;

    if(b == &a)
    {
        NSLog(@"Do we go here?");
    }

    if(*b == a)
    {
        NSLog(@"What about here?");
    }

    return 0;
}
What	
  is	
  the	
  result	
  now?	
  
int main(int argc, char *argv[])
{
    int a = 5;
    int *b = &a;

    *b = 10;

    NSLog(@"%i", a);

    return 0;
}
Memory	
  Areas	
  
•  Memory	
  can	
  be	
  divided	
  into	
  three	
  categories	
  
   1.  Global	
  or	
  sta)c	
  
   2.  Stack	
  
   3.  Heap	
  
Sta)c	
  
•  When	
  something	
  is	
  in	
  sta)c	
  memory,	
  it's	
  there	
  
   all	
  the	
  )me	
  when	
  app	
  is	
  running	
  
•  So	
  when	
  star)ng	
  the	
  app,	
  the	
  memory	
  is	
  
   allocated	
  an	
  when	
  the	
  app	
  closes,	
  the	
  memory	
  
   is	
  deallocated	
  
•  The	
  variable	
  is	
  stored	
  in	
  the	
  same	
  memory	
  
   address	
  all	
  the	
  )me.	
  
Example	
  of	
  Sta)c	
  Memory	
  
int thisIsStoredInStaticMemory = 5;

int main(int argc, char *argv[])
{
    static int thisIsAlsoStoredInStaticMemory = 10;

    NSLog(@"My number = %i", thisIsStoredInStaticMemory);
    NSLog(@"My number = %i", thisIsAlsoStoredInStaticMemory);

    return 0;
}
Stack	
  -­‐	
  Memory	
  
•  Stack	
  –	
  memoryarea	
  is	
  usually	
  small	
  
•  If	
  you	
  put	
  too	
  much	
  "stuff"	
  into	
  stack,	
  you	
  
   might	
  get	
  stack	
  overflow	
  
•  Local	
  variables	
  are	
  stored	
  in	
  stack!	
  
•  Variables	
  are	
  released	
  when	
  out	
  of	
  scope	
  
Example	
  of	
  Stack	
  Memory	
  
int main(int argc, char *argv[])
{
    int stack1 = 3;

    NSLog(@"My number = %i", stack1);

    if(YES)
    {
        int stack2 = 4;
        NSLog(@"My number = %i", stack2);
        // stack2 is released from memory now.
    }

    // stack1 is released from memory now.
    return 0;
}
Example	
  of	
  Stack	
  Memory	
  
int main(int argc, char *argv[])
{
    if(YES)
    {
        int stack2 = 4;
    }

    // Does this work?
    NSLog(@"My number = %i", stack2);
    return 0;
}
Heap	
  -­‐	
  Memory	
  
•  Heap	
  –	
  memory	
  is	
  the	
  large	
  memory	
  area	
  
   where	
  almost	
  all	
  of	
  the	
  objects	
  go.	
  
•  Programmer	
  is	
  responsible	
  for	
  releasing	
  the	
  
   objects!	
  	
  
Example	
  of	
  Heap	
  -­‐	
  memory	
  
#import "MyPoint.h"

int main(int argc, char *argv[])
{
    MyPoint* point = [MyPoint alloc];
    //...
    [point release];

    return 0;
}
Crea)ng	
  a	
  Object	
  
•  The	
  crea)on	
  of	
  an	
  object	
  is	
  done	
  in	
  two	
  parts	
  
•  1)	
  Alloca)ng	
  memory	
  
    –  MyPoint* point = [MyPoint alloc];
•  2)	
  Ini)alize	
  object	
  state	
  
    –  point = [point init];
•  Combined	
  
    –  MyPoint* point = [[MyPoint alloc] init];
•  ó	
  
    –  MyPoint* point = [MyPoint new];
What	
  happens	
  in	
  Memory?	
  
•  What	
  happens	
  in	
  here?	
  
    –  MyPoint* p = [MyPoint alloc];
•  Two	
  things!	
  
    –  MyPoint* p;
    –  p = [MyPoint alloc];
•  p	
  is	
  in	
  stack	
  –	
  memory!	
  
•  MyPoint	
  object	
  is	
  in	
  heap	
  memory!	
  
Problem?	
  
#import "MyPoint.h"

int main(int argc, char *argv[])
{
    if(YES)
    {
          MyPoint* point = [MyPoint alloc];
    }

    [point release];

    return 0;
}
Problem?	
  
#import "MyPoint.h"

int main(int argc, char *argv[])
{
    MyPoint* point = [MyPoint alloc];
    point = [MyPoint alloc];

    [point release];

    return 0;
}
init-­‐method?	
  
•  init-­‐method	
  is	
  implemented	
  in	
  NSObject
•  You	
  can	
  however	
  implement	
  your	
  own	
  init-­‐
   method	
  

- (id) initWithName: (NSString*) aName
{
    if(self = [super init])
    {
         name = aName;
    }
    return self;
}
Other	
  init-­‐methods	
  
•  Like	
  in	
  Java	
  and	
  C++,	
  one	
  can	
  have	
  mul)ple	
  
   constructors	
  
•  In	
  Obj-­‐C,	
  one	
  can	
  have	
  mul)ple	
  init-­‐methods	
  

-  (id) init
-  (id) initWithX: (int) aX;
-  (id) initWithX: (int) aX andY: (int) aY
Deallocing	
  Object	
  and	
  Reference	
  Count	
  

•  Rules	
  about	
  reference	
  coun=ng	
  
    –  When	
  object	
  is	
  created	
  its	
  reference	
  count	
  is	
  set	
  to	
  1	
  
    –  Incremen)ng	
  the	
  reference	
  count:	
  
          •  [point retain];
    –  Decreasing	
  reference	
  count	
  
          •  [point release];
    –  When	
  reference	
  count	
  reaches	
  to	
  0,	
  dealloca=ng	
  occurs	
  
•  ARC	
  will	
  save	
  you	
  from	
  this!	
  
Reference	
  Count	
  Example	
  
#import <Foundation/Foundation.h>

@interface Cat : NSObject
{

}

- (void) printMyRetainCount;

@end

@implementation Cat

- (void) printMyRetainCount
{
    NSLog(@"Retain count = %i", [self retainCount]);
}

@end
Reference	
  Count	
  Example	
  
int main(int argc, char *argv[])
{
    Cat* myCat = [[Cat alloc] init];
    [myCat printMyRetainCount]; // Retain count = 1

    Cat* reference = myCat;
    [reference retain];
    [myCat printMyRetainCount]; // Retain count = 2

    [myCat release];
    [myCat printMyRetainCount]; // Retain count = 1
    [myCat release];            // Deallocation

    return 0;
}
dealloc
•  You	
  can	
  implement	
  a	
  dealloc	
  method	
  

(void) dealloc
{
   // Some code
   [super dealloc];
}
Reference	
  Count	
  Example	
  
#import <Foundation/Foundation.h>        int main(int argc, char *argv[])
                                         {
@interface Cat : NSObject                   ....
{                                           Cat* mirri = [[Cat alloc] init];
    NSString* name;                         [mirri setName: someName];
}                                           // What happens now?
                                            [someName release];
- (void) setName: (NSString *) theName
                                         }
@end                                                Since	
  reference	
  count	
  is	
  
                                                     0,	
  dealloca)on	
  occurs.	
  
@implementation Cat                                 This	
  means,	
  that	
  the	
  Cat	
  
                                                     does	
  not	
  have	
  a	
  name	
  
- (void) setName: (NSString *) theName                         anymore.	
  
{
   name = theName;
}
@end
Reference	
  Count	
  Example	
  
#import <Foundation/Foundation.h>        int main(int argc, char *argv[])
                                         {
@interface Cat : NSObject                   ....
{                                           Cat* mirri = [[Cat alloc] init];
    NSString* name;                         [mirri setName: someName];
}                                           // What happens now?
                                            [someName release];
- (void) setName: (NSString *) theName
                                         }
@end
                                                    Since	
  reference	
  count	
  is	
  
                                                    1,	
  dealloca)on	
  does	
  not	
  
@implementation Cat
                                                     occur	
  and	
  the	
  Cat	
  s)ll	
  
                                                            has	
  it's	
  name.	
  
- (void) setName: (NSString *) theName
{
   [name release];
   name = theName;
   [name retain];
}
@end
Copying	
  a	
  Object	
  
- (void)setName:(NSString *)theName
}
    [name release];
    name = [theName copy];
}
Autorelease	
  Pool	
  
•  Every	
  Founda)on	
  program	
  must	
  set	
  up	
  
   autorelease	
  pool	
  for	
  the	
  Founda)on	
  objects	
  
•  Pool	
  keeps	
  track	
  of	
  your	
  objects	
  for	
  later	
  
   release	
  
    –  NSAutoreleasePool *pool = [[NSAutoreleasePool
       alloc] init];
    –  ...
    –  [pool drain];
Method	
  Names	
  
•  If	
  method	
  name	
  includes	
  alloc	
  or	
  copy,	
  it	
  
   returns	
  a	
  object	
  that	
  must	
  be	
  released	
  
    –    // Must be released
    –    NSObject* object = [[NSObject alloc] init];
    –    // Must be released
    –    NSObject* copy = [object copy];
    –    // Do not have to release
    –    NSMutableString* string = [NSMutableString string];
•  The	
  above	
  string	
  is	
  released	
  in	
  Autorelease	
  Pool!
Problem	
  
// Programmer A code
[[someObject giveCat] eat];



// Programmer B code
- (Cat*) giveCat
{
    // Must be released!
    Cat* myCat = [[Cat alloc] init];

     // But where? Should the programmer who calls this method be
     // responsible for deallocation of the Cat? How does the programmer
     // know this?
     return myCat;
}

..
Solu)on	
  
// Programmer A code
[[someObject giveCat] eat];


// Programmer B code
- (Cat*) giveCat
{
    // Must be released!
    Cat* myCat = [[Cat alloc] init];

    // But where? When autopool is drained!
    [myCat autorelease];
    return myCat;
}
Delayed	
  Release	
  
•  Autorelease	
  means	
  "send	
  release	
  message	
  
   later".	
  
•  Release	
  message	
  is	
  sent	
  when	
  Autorelease	
  
   Pool	
  is	
  released	
  
•  Autorelease	
  Pool	
  is	
  created	
  and	
  released	
  in	
  
   UIKit	
  programs	
  automa=cally!	
  
    –  Pool	
  is	
  created	
  at	
  the	
  beginning	
  of	
  an	
  event	
  cycle	
  
    –  Pool	
  is	
  released	
  at	
  the	
  end	
  of	
  an	
  event	
  cycle	
  
Autorelease	
  Pools	
  
                                                         Event	
  loop	
  



                      Pool	
  
                    released	
  




                                                                Pool	
  
                                                              created	
  


App	
  Loaded	
                    Wait	
  for	
  Event	
                   Handle	
  event	
     Exit	
  app	
  
Autorelease	
  Pool	
  Usage	
  
// Method
- (Cat*) giveCat
{
    // Must be released!
    Cat* myCat = [[Cat alloc] init];

    // But where? When autopool is drained!
    [myCat autorelease];
    return myCat;
}
// Usage
Cat* someCat = [object giveCat];
// someCat will be released in some time, so if you want to hold it, use
// retain
[someCat retain];
Rules	
  
•  If	
  method	
  name	
  contains	
  "alloc",	
  "new"	
  or	
  
   "copy",	
  you	
  must	
  remember	
  to	
  use	
  release
   or	
  autorelease
   –  Example:	
  alloc, newObject, mutableCopy
•  If	
  you	
  retain something,	
  you	
  must	
  use	
  
   release or	
  autorelease
•  Instance	
  Variables:	
  retain	
  or	
  copy	
  
•  autorelease	
  means	
  "send	
  release later"	
  
Cat.h	
  
#import <Foundation/Foundation.h>

@interface Cat : NSObject
{
    @private
        NSString* name;
}

-   (id)          initWithName: (NSString*) aName;
-   (void)        setName: (NSString*) aName;
-   (NSString*)   getName;
-   (void)        dealloc;

@end
Cat.m	
  
#import "Cat.h"                          - (void) setName: (NSString*) aName
                                         {
@implementation Cat                          if(aName != name)
                                             {
- (id) initWithName: (NSString*) aName           [name release];
{                                                name = aName;
    if(self = [super init])                      [name retain];
    {                                        }
        [self setName: aName];           }
    }
    return self;
}                                        - (void) dealloc
                                         {
- (NSString*) getName                        [name release];
{                                            [super dealloc];
    return name;                         }
}
                                         @end
main.m	
  
#import "Cat.h"                                 // Get the name
                                                NSString* name = [cat getName];
int main(int argc, char *argv[])
{                                               // Print the name
    NSAutoreleasePool *pool =                   NSLog(name);
    [[NSAutoreleasePool alloc] init];
                                                // Release name and cat
   // Create the string                         [cat release];
   NSString* catName = [[NSString
   alloc] initWithString: @"Jack"];
                                                [pool drain];
   // Create cat with the string                return 0;
   Cat* cat = [[Cat alloc]              }	
  
   initWithName: catName];

   // Just testing. This does not
   deallocate catName!
   [catName release];
ARC	
  to	
  the	
  rescue!	
  

MANAGING	
  MEMORY	
  WITH	
  ARC	
  
ARC?	
  
•  ARC	
  (Automa=c	
  Reference	
  Coun=ng)	
  
   –  Compiler	
  does	
  automa/c	
  reference	
  coun/ng	
  by	
  
      examining	
  the	
  source	
  code	
  and	
  then	
  add	
  the	
  
      retain	
  and	
  release	
  messages	
  to	
  objects	
  
•  Not	
  garbage	
  collec)on,	
  no	
  background	
  
   process	
  of	
  dealloca)on	
  of	
  objects!	
  
•  Inserts	
  retain	
  and	
  release	
  statements	
  based	
  
   on	
  some	
  fixed	
  rules	
  
•  OS	
  X	
  10.7	
  and	
  iOS	
  5	
  for	
  all	
  features	
  
Object	
  lose	
  owners	
  
// Scenario 1
Person* jack = [[Person alloc] init];
jack = [[Person alloc] init];

// Scenario 2
Person* tina = [[Person alloc] init];
tina = nil;

// Scenario 3
if(yes) {
   Person* dave = [[Person alloc] init];
}
Some	
  Fixed	
  rules	
  
•  If	
  object	
  is	
  allocated	
  and	
  local	
  to	
  method,	
  
   release	
  statement	
  is	
  added	
  near	
  the	
  end	
  of	
  
   that	
  method	
  
•  If	
  allocated	
  object	
  is	
  class	
  a@ribute,	
  release	
  is	
  
   added	
  to	
  dealloc	
  
•  If	
  the	
  object	
  is	
  return	
  value,	
  it	
  gets	
  an	
  
   autorelease	
  statement	
  
Guidelines	
  
•  Don’t	
  call!	
  
    –  retain, release, retainCount, autorelease
       or dealloc
•  You	
  must	
  use	
  @autoreleasepool	
  syntax	
  
•  You	
  must	
  enable	
  ARC	
  
    –  clang -fobjc-arc -framework foundation
       Car.m Motor.m main.m -o App
makefile	
  
MyPoint : Car.m Motor.m main.m
    clang -fobjc-arc -framework foundation Car.m Motor.m main.m
-o App

run :
    ./App

clean :
    rm App
main.m	
  
motor.h	
  
motor.m	
  
car.h	
  
car.m	
  
PROPERTIES	
  
Objec)ve-­‐C	
  2.0:	
  @property
Objec)ve-­‐C	
  2.0:	
  @synthesize
Objec)ve-­‐C	
  2.0:	
  Dot	
  Syntax	
  
Autosynthesize	
  
Autosynthesize	
  
Property	
  Declara)on	
  Aoributes:	
  
                   Writability	
  
•  You	
  can	
  decorate	
  a	
  property	
  with	
  aoributes,	
  
   example:	
  
    –  @property (readonly) int x;
•  readwrite
    –  Indicates	
  that	
  the	
  property	
  is	
  read/write.	
  Default	
  
•  readonly
    –  Only	
  read	
  
    –  Generates	
  only	
  geoer	
  method	
  
Seoer	
  Seman)cs	
  
•  assign
  –  Simple	
  seoer.	
  Default.	
  
•  weak
  –  Non-­‐owning	
  rela)onship	
  with	
  an	
  object	
  
  –  If	
  object	
  is	
  deallocated,	
  the	
  property	
  is	
  set	
  to	
  nil	
  
•  strong
  –  Owning	
  rela)onship	
  with	
  an	
  object	
  
•  copy
  –  Specifies	
  that	
  a	
  copy	
  of	
  the	
  object	
  should	
  be	
  used	
  for	
  
     assignment	
  
Seoer	
  Seman)cs	
  Examples	
  
// assign
property = newValue;

// copy
if (property != newValue)
{
   [property release];
   property = [newValue copy];
}
Atomicity	
  
•  nonatomic
   –  Specifies	
  that	
  accessor	
  are	
  non-­‐atomic.	
  	
  
•  Proper)es	
  are	
  atomic	
  by	
  default:	
  
   –  [_internal lock];
   –  id result = [[value retain] autorelease];
   –  [_internal unlock];
   –  return id;
Car.h	
  
Motor.h	
  
Main.m	
  
Change!	
  Car.h	
  
STRINGS	
  
About	
  Strings	
  
•  C	
  String	
  
    –  char * // Array of characters
•  NSString
    –  Object,	
  that	
  holds	
  array	
  of	
  Unicode	
  characters	
  
    –  Is	
  immutable,	
  contents	
  cannot	
  be	
  changed	
  
       aLerwards!	
  
•  NSMutableString
    –  String	
  that	
  can	
  be	
  modified	
  aLerwards	
  
Crea)ng	
  Strings	
  
// Simple way
NSString *temp1 = @"Hello World!";

// Appending, notice that this produces new string
NSString *beginning = @"beginning";
NSString *alphaAndOmega = [beginning
  stringByAppendingString:@" and end"];
Formapng	
  
•  Formapng	
  
   –  NSString *string1 = [NSString stringWithFormat:@"A
      string: %@, a float: %1.2f", @"string", 31415.9265];
   –  // string1 is "A string: string, a float: 31415.93"

•  Format	
  Specifiers?	
  
   –  http://developer.apple.com/iphone/
      library/documentation/Cocoa/Conceptual/
      Strings/Articles/formatSpecifiers.html#//
      apple_ref/doc/uid/TP40004265-SW1
NSString	
  methods	
  
•  See:	
  
    –  http://developer.apple.com/documentation/
       Cocoa/Reference/Foundation/Classes/
       NSString_Class/Reference/NSString.html
NSMutableString methods	
  
•  NSMutableString inherites	
  NSString
•  With	
  NSMutableString you	
  can	
  modify	
  the	
  
   string	
  with	
  these	
  methods	
  
   – appendFormat:
   – appendString:
   – deleteCharactersInRange:
   – insertString:atIndex:
   – replaceCharactersInRange:withString:
   – replaceOccurrencesOfString:withString:options:range:
   – setString:
PROTOCOLS	
  
Protocols?	
  
•  Compared	
  to	
  Java,	
  protocols	
  are	
  interfaces	
  
•  You	
  define	
  methods	
  that	
  some	
  object	
  must	
  
     implement	
  
	
  
     	
  
Using	
  Protocols	
  
// MyProtocolName.h
// Notice that the protocol inherites NSObject
// protocol!
@protocol MyProtocolName <NSObject>
  //Method declarations go here
@end

// MyObject
@interface Class: NSObject <MyProtocolName>
	
  
Protocol	
  as	
  Variable	
  
•  In	
  Java	
  
     –  MyInterface object = new MyObject();
•  In	
  Obj-­‐C	
  
     –  id<MyProtocolName> object = [[MyObject
        alloc] init];
•  As	
  a	
  method	
  argument	
  
     –  (void) doSomethingWithThisObject:
        (id<MyProtocolName>) aObject
•  ID	
  is	
  a	
  predefined	
  pointer	
  type	
  for	
  an	
  arbitrary	
  
   object	
  
   	
  
FOUNDATION	
  CLASSES	
  
NSObject	
  
•  NSObject	
  is	
  the	
  root	
  class	
  of	
  Most	
  Obj-­‐C	
  
     classes	
  
•  Crea)ng,	
  copying,	
  dealloca)ng	
  objects	
  
	
  
Collec)ons	
  
•  Array:	
  Ordered	
  Collec/ons	
  
•  Dic)onary:	
  Collec/ons	
  of	
  Keys	
  and	
  Values	
  
•  Set:	
  Unordered	
  Collec/ons	
  of	
  Objects	
  
•  Counted	
  Sets:	
  Unordered	
  Collec/on	
  of	
  
   Indis/nct	
  Objects	
  
•  Enumera)on:	
  Traversing	
  a	
  Collec/on's	
  
   Elements	
  
•  Mutable	
  and	
  immutable	
  versions!	
  
Other	
  Classes	
  
•  NSNumber,	
  wrapper	
  for	
  standard	
  number	
  
   types	
  
•  NSDate,	
  NSCalendarDate	
  

Weitere ähnliche Inhalte

Was ist angesagt?

Code is not text! How graph technologies can help us to understand our code b...
Code is not text! How graph technologies can help us to understand our code b...Code is not text! How graph technologies can help us to understand our code b...
Code is not text! How graph technologies can help us to understand our code b...Andreas Dewes
 
Learning from other's mistakes: Data-driven code analysis
Learning from other's mistakes: Data-driven code analysisLearning from other's mistakes: Data-driven code analysis
Learning from other's mistakes: Data-driven code analysisAndreas Dewes
 
What's New in C++ 11/14?
What's New in C++ 11/14?What's New in C++ 11/14?
What's New in C++ 11/14?Dina Goldshtein
 
Memory Management with Java and C++
Memory Management with Java and C++Memory Management with Java and C++
Memory Management with Java and C++Mohammad Shaker
 
C++11 smart pointer
C++11 smart pointerC++11 smart pointer
C++11 smart pointerLei Yu
 
Modern C++ Explained: Move Semantics (Feb 2018)
Modern C++ Explained: Move Semantics (Feb 2018)Modern C++ Explained: Move Semantics (Feb 2018)
Modern C++ Explained: Move Semantics (Feb 2018)Olve Maudal
 
STL ALGORITHMS
STL ALGORITHMSSTL ALGORITHMS
STL ALGORITHMSfawzmasood
 
Lecture 3, c++(complete reference,herbet sheidt)chapter-13
Lecture 3, c++(complete reference,herbet sheidt)chapter-13Lecture 3, c++(complete reference,herbet sheidt)chapter-13
Lecture 3, c++(complete reference,herbet sheidt)chapter-13Abu Saleh
 
Memory Management C++ (Peeling operator new() and delete())
Memory Management C++ (Peeling operator new() and delete())Memory Management C++ (Peeling operator new() and delete())
Memory Management C++ (Peeling operator new() and delete())Sameer Rathoud
 
C++11: Feel the New Language
C++11: Feel the New LanguageC++11: Feel the New Language
C++11: Feel the New Languagemspline
 
Writing Node.js Bindings - General Principles - Gabriel Schulhof
Writing Node.js Bindings - General Principles - Gabriel SchulhofWriting Node.js Bindings - General Principles - Gabriel Schulhof
Writing Node.js Bindings - General Principles - Gabriel SchulhofWithTheBest
 

Was ist angesagt? (20)

Code is not text! How graph technologies can help us to understand our code b...
Code is not text! How graph technologies can help us to understand our code b...Code is not text! How graph technologies can help us to understand our code b...
Code is not text! How graph technologies can help us to understand our code b...
 
Learning from other's mistakes: Data-driven code analysis
Learning from other's mistakes: Data-driven code analysisLearning from other's mistakes: Data-driven code analysis
Learning from other's mistakes: Data-driven code analysis
 
Objective c intro (1)
Objective c intro (1)Objective c intro (1)
Objective c intro (1)
 
The Style of C++ 11
The Style of C++ 11The Style of C++ 11
The Style of C++ 11
 
What's New in C++ 11/14?
What's New in C++ 11/14?What's New in C++ 11/14?
What's New in C++ 11/14?
 
Smart pointers
Smart pointersSmart pointers
Smart pointers
 
Memory Management with Java and C++
Memory Management with Java and C++Memory Management with Java and C++
Memory Management with Java and C++
 
C++11 smart pointer
C++11 smart pointerC++11 smart pointer
C++11 smart pointer
 
What's New in C++ 11?
What's New in C++ 11?What's New in C++ 11?
What's New in C++ 11?
 
Memory Management In C++
Memory Management In C++Memory Management In C++
Memory Management In C++
 
Modern C++ Explained: Move Semantics (Feb 2018)
Modern C++ Explained: Move Semantics (Feb 2018)Modern C++ Explained: Move Semantics (Feb 2018)
Modern C++ Explained: Move Semantics (Feb 2018)
 
STL ALGORITHMS
STL ALGORITHMSSTL ALGORITHMS
STL ALGORITHMS
 
Lecture 3, c++(complete reference,herbet sheidt)chapter-13
Lecture 3, c++(complete reference,herbet sheidt)chapter-13Lecture 3, c++(complete reference,herbet sheidt)chapter-13
Lecture 3, c++(complete reference,herbet sheidt)chapter-13
 
Memory Management C++ (Peeling operator new() and delete())
Memory Management C++ (Peeling operator new() and delete())Memory Management C++ (Peeling operator new() and delete())
Memory Management C++ (Peeling operator new() and delete())
 
C++11: Feel the New Language
C++11: Feel the New LanguageC++11: Feel the New Language
C++11: Feel the New Language
 
Writing Node.js Bindings - General Principles - Gabriel Schulhof
Writing Node.js Bindings - General Principles - Gabriel SchulhofWriting Node.js Bindings - General Principles - Gabriel Schulhof
Writing Node.js Bindings - General Principles - Gabriel Schulhof
 
C++ 11
C++ 11C++ 11
C++ 11
 
C++11
C++11C++11
C++11
 
Modern C++
Modern C++Modern C++
Modern C++
 
Knolx session
Knolx sessionKnolx session
Knolx session
 

Andere mochten auch

Iphone programming: Objective c
Iphone programming: Objective cIphone programming: Objective c
Iphone programming: Objective cKenny Nguyen
 
Lect 1. introduction to programming languages
Lect 1. introduction to programming languagesLect 1. introduction to programming languages
Lect 1. introduction to programming languagesVarun Garg
 
Automatic Reference Counting @ Pragma Night
Automatic Reference Counting @ Pragma NightAutomatic Reference Counting @ Pragma Night
Automatic Reference Counting @ Pragma NightGiuseppe Arici
 
Google+ Profile PageRank: The Real AuthorRank? - SMX Advanced 2013
Google+ Profile PageRank: The Real AuthorRank? - SMX Advanced 2013Google+ Profile PageRank: The Real AuthorRank? - SMX Advanced 2013
Google+ Profile PageRank: The Real AuthorRank? - SMX Advanced 2013Mark Traphagen
 
Introduction to jQuery Mobile
Introduction to jQuery MobileIntroduction to jQuery Mobile
Introduction to jQuery MobileTroy Miles
 
Google+ Authorship Publisher Webinar - Search Influence
Google+ Authorship Publisher Webinar - Search InfluenceGoogle+ Authorship Publisher Webinar - Search Influence
Google+ Authorship Publisher Webinar - Search InfluenceSearch Influence
 
SEO Strategy and The Hummingbird Effect
SEO Strategy and The Hummingbird EffectSEO Strategy and The Hummingbird Effect
SEO Strategy and The Hummingbird EffectRobin Leonard
 
The science of landing pages
The science of landing pagesThe science of landing pages
The science of landing pagesUnbounce
 
Automatic Reference Counting
Automatic Reference CountingAutomatic Reference Counting
Automatic Reference CountingGiuseppe Arici
 

Andere mochten auch (20)

Iphone programming: Objective c
Iphone programming: Objective cIphone programming: Objective c
Iphone programming: Objective c
 
Parte II Objective C
Parte II   Objective CParte II   Objective C
Parte II Objective C
 
Lect 1. introduction to programming languages
Lect 1. introduction to programming languagesLect 1. introduction to programming languages
Lect 1. introduction to programming languages
 
Objective-C for Beginners
Objective-C for BeginnersObjective-C for Beginners
Objective-C for Beginners
 
English ppt 2
English ppt 2English ppt 2
English ppt 2
 
English ppt
English pptEnglish ppt
English ppt
 
0-oop java-intro
0-oop java-intro0-oop java-intro
0-oop java-intro
 
1-oop java-object
1-oop java-object1-oop java-object
1-oop java-object
 
Digital Universitas
Digital UniversitasDigital Universitas
Digital Universitas
 
GDB Mobile
GDB MobileGDB Mobile
GDB Mobile
 
Automatic Reference Counting @ Pragma Night
Automatic Reference Counting @ Pragma NightAutomatic Reference Counting @ Pragma Night
Automatic Reference Counting @ Pragma Night
 
Google+ Profile PageRank: The Real AuthorRank? - SMX Advanced 2013
Google+ Profile PageRank: The Real AuthorRank? - SMX Advanced 2013Google+ Profile PageRank: The Real AuthorRank? - SMX Advanced 2013
Google+ Profile PageRank: The Real AuthorRank? - SMX Advanced 2013
 
Css3
Css3Css3
Css3
 
Introduction to jQuery Mobile
Introduction to jQuery MobileIntroduction to jQuery Mobile
Introduction to jQuery Mobile
 
Google+ Authorship Publisher Webinar - Search Influence
Google+ Authorship Publisher Webinar - Search InfluenceGoogle+ Authorship Publisher Webinar - Search Influence
Google+ Authorship Publisher Webinar - Search Influence
 
SEO Strategy and The Hummingbird Effect
SEO Strategy and The Hummingbird EffectSEO Strategy and The Hummingbird Effect
SEO Strategy and The Hummingbird Effect
 
Objective-C @ ITIS
Objective-C @ ITISObjective-C @ ITIS
Objective-C @ ITIS
 
The science of landing pages
The science of landing pagesThe science of landing pages
The science of landing pages
 
Automatic Reference Counting
Automatic Reference CountingAutomatic Reference Counting
Automatic Reference Counting
 
wtf is in Java/JDK/wtf7?
wtf is in Java/JDK/wtf7?wtf is in Java/JDK/wtf7?
wtf is in Java/JDK/wtf7?
 

Ähnlich wie Introduction to Objective-C

Introduction to objective c
Introduction to objective cIntroduction to objective c
Introduction to objective csagaroceanic11
 
Agile Iphone Development
Agile Iphone DevelopmentAgile Iphone Development
Agile Iphone DevelopmentGiordano Scalzo
 
13. dynamic allocation
13. dynamic allocation13. dynamic allocation
13. dynamic allocation웅식 전
 
Data Structure in C (Lab Programs)
Data Structure in C (Lab Programs)Data Structure in C (Lab Programs)
Data Structure in C (Lab Programs)Saket Pathak
 
Notes about moving from python to c++ py contw 2020
Notes about moving from python to c++ py contw 2020Notes about moving from python to c++ py contw 2020
Notes about moving from python to c++ py contw 2020Yung-Yu Chen
 
Dynamic memory allocation
Dynamic memory allocationDynamic memory allocation
Dynamic memory allocationViji B
 
MFF UK - Introduction to iOS
MFF UK - Introduction to iOSMFF UK - Introduction to iOS
MFF UK - Introduction to iOSPetr Dvorak
 
(2) collections algorithms
(2) collections algorithms(2) collections algorithms
(2) collections algorithmsNico Ludwig
 
#OOP_D_ITS - 2nd - C++ Getting Started
#OOP_D_ITS - 2nd - C++ Getting Started#OOP_D_ITS - 2nd - C++ Getting Started
#OOP_D_ITS - 2nd - C++ Getting StartedHadziq Fabroyir
 
C++totural file
C++totural fileC++totural file
C++totural filehalaisumit
 
SPL_PS2 (1).ppt
SPL_PS2 (1).pptSPL_PS2 (1).ppt
SPL_PS2 (1).ppttadudemise
 
Cluj.py Meetup: Extending Python in C
Cluj.py Meetup: Extending Python in CCluj.py Meetup: Extending Python in C
Cluj.py Meetup: Extending Python in CSteffen Wenz
 
LCDS - State Presentation
LCDS - State PresentationLCDS - State Presentation
LCDS - State PresentationRuochun Tzeng
 

Ähnlich wie Introduction to Objective-C (20)

Introduction to objective c
Introduction to objective cIntroduction to objective c
Introduction to objective c
 
dynamic-allocation.pdf
dynamic-allocation.pdfdynamic-allocation.pdf
dynamic-allocation.pdf
 
Agile Iphone Development
Agile Iphone DevelopmentAgile Iphone Development
Agile Iphone Development
 
13. dynamic allocation
13. dynamic allocation13. dynamic allocation
13. dynamic allocation
 
Introduction to c part -3
Introduction to c   part -3Introduction to c   part -3
Introduction to c part -3
 
Data Structure in C (Lab Programs)
Data Structure in C (Lab Programs)Data Structure in C (Lab Programs)
Data Structure in C (Lab Programs)
 
Notes about moving from python to c++ py contw 2020
Notes about moving from python to c++ py contw 2020Notes about moving from python to c++ py contw 2020
Notes about moving from python to c++ py contw 2020
 
Dynamic memory allocation
Dynamic memory allocationDynamic memory allocation
Dynamic memory allocation
 
MFF UK - Introduction to iOS
MFF UK - Introduction to iOSMFF UK - Introduction to iOS
MFF UK - Introduction to iOS
 
(2) collections algorithms
(2) collections algorithms(2) collections algorithms
(2) collections algorithms
 
ch08.ppt
ch08.pptch08.ppt
ch08.ppt
 
Android ndk
Android ndkAndroid ndk
Android ndk
 
Iphone course 1
Iphone course 1Iphone course 1
Iphone course 1
 
Day 1
Day 1Day 1
Day 1
 
#OOP_D_ITS - 2nd - C++ Getting Started
#OOP_D_ITS - 2nd - C++ Getting Started#OOP_D_ITS - 2nd - C++ Getting Started
#OOP_D_ITS - 2nd - C++ Getting Started
 
C++ tutorial
C++ tutorialC++ tutorial
C++ tutorial
 
C++totural file
C++totural fileC++totural file
C++totural file
 
SPL_PS2 (1).ppt
SPL_PS2 (1).pptSPL_PS2 (1).ppt
SPL_PS2 (1).ppt
 
Cluj.py Meetup: Extending Python in C
Cluj.py Meetup: Extending Python in CCluj.py Meetup: Extending Python in C
Cluj.py Meetup: Extending Python in C
 
LCDS - State Presentation
LCDS - State PresentationLCDS - State Presentation
LCDS - State Presentation
 

Mehr von Jussi Pohjolainen

libGDX: Screens, Fonts and Preferences
libGDX: Screens, Fonts and PreferenceslibGDX: Screens, Fonts and Preferences
libGDX: Screens, Fonts and PreferencesJussi Pohjolainen
 
libGDX: User Input and Frame by Frame Animation
libGDX: User Input and Frame by Frame AnimationlibGDX: User Input and Frame by Frame Animation
libGDX: User Input and Frame by Frame AnimationJussi Pohjolainen
 
Intro to Building Android Games using libGDX
Intro to Building Android Games using libGDXIntro to Building Android Games using libGDX
Intro to Building Android Games using libGDXJussi Pohjolainen
 
Advanced JavaScript Development
Advanced JavaScript DevelopmentAdvanced JavaScript Development
Advanced JavaScript DevelopmentJussi Pohjolainen
 
libGDX: Simple Frame Animation
libGDX: Simple Frame AnimationlibGDX: Simple Frame Animation
libGDX: Simple Frame AnimationJussi Pohjolainen
 
libGDX: Simple Frame Animation
libGDX: Simple Frame AnimationlibGDX: Simple Frame Animation
libGDX: Simple Frame AnimationJussi Pohjolainen
 
Implementing a Simple Game using libGDX
Implementing a Simple Game using libGDXImplementing a Simple Game using libGDX
Implementing a Simple Game using libGDXJussi Pohjolainen
 
Building Android games using LibGDX
Building Android games using LibGDXBuilding Android games using LibGDX
Building Android games using LibGDXJussi Pohjolainen
 
Creating Asha Games: Game Pausing, Orientation, Sensors and Gestures
Creating Asha Games: Game Pausing, Orientation, Sensors and GesturesCreating Asha Games: Game Pausing, Orientation, Sensors and Gestures
Creating Asha Games: Game Pausing, Orientation, Sensors and GesturesJussi Pohjolainen
 
Creating Games for Asha - platform
Creating Games for Asha - platformCreating Games for Asha - platform
Creating Games for Asha - platformJussi Pohjolainen
 

Mehr von Jussi Pohjolainen (20)

Moved to Speakerdeck
Moved to SpeakerdeckMoved to Speakerdeck
Moved to Speakerdeck
 
Java Web Services
Java Web ServicesJava Web Services
Java Web Services
 
Box2D and libGDX
Box2D and libGDXBox2D and libGDX
Box2D and libGDX
 
libGDX: Screens, Fonts and Preferences
libGDX: Screens, Fonts and PreferenceslibGDX: Screens, Fonts and Preferences
libGDX: Screens, Fonts and Preferences
 
libGDX: Tiled Maps
libGDX: Tiled MapslibGDX: Tiled Maps
libGDX: Tiled Maps
 
libGDX: User Input and Frame by Frame Animation
libGDX: User Input and Frame by Frame AnimationlibGDX: User Input and Frame by Frame Animation
libGDX: User Input and Frame by Frame Animation
 
Intro to Building Android Games using libGDX
Intro to Building Android Games using libGDXIntro to Building Android Games using libGDX
Intro to Building Android Games using libGDX
 
Advanced JavaScript Development
Advanced JavaScript DevelopmentAdvanced JavaScript Development
Advanced JavaScript Development
 
Introduction to JavaScript
Introduction to JavaScriptIntroduction to JavaScript
Introduction to JavaScript
 
Introduction to AngularJS
Introduction to AngularJSIntroduction to AngularJS
Introduction to AngularJS
 
libGDX: Scene2D
libGDX: Scene2DlibGDX: Scene2D
libGDX: Scene2D
 
libGDX: Simple Frame Animation
libGDX: Simple Frame AnimationlibGDX: Simple Frame Animation
libGDX: Simple Frame Animation
 
libGDX: Simple Frame Animation
libGDX: Simple Frame AnimationlibGDX: Simple Frame Animation
libGDX: Simple Frame Animation
 
libGDX: User Input
libGDX: User InputlibGDX: User Input
libGDX: User Input
 
Implementing a Simple Game using libGDX
Implementing a Simple Game using libGDXImplementing a Simple Game using libGDX
Implementing a Simple Game using libGDX
 
Building Android games using LibGDX
Building Android games using LibGDXBuilding Android games using LibGDX
Building Android games using LibGDX
 
Android Threading
Android ThreadingAndroid Threading
Android Threading
 
Creating Asha Games: Game Pausing, Orientation, Sensors and Gestures
Creating Asha Games: Game Pausing, Orientation, Sensors and GesturesCreating Asha Games: Game Pausing, Orientation, Sensors and Gestures
Creating Asha Games: Game Pausing, Orientation, Sensors and Gestures
 
Creating Games for Asha - platform
Creating Games for Asha - platformCreating Games for Asha - platform
Creating Games for Asha - platform
 
Intro to Asha UI
Intro to Asha UIIntro to Asha UI
Intro to Asha UI
 

Kürzlich hochgeladen

08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 

Kürzlich hochgeladen (20)

08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 

Introduction to Objective-C

  • 1. Introduc)on  to  Objec)ve-­‐C   Jussi  Pohjolainen   Tampere  University  of  Applied  Sciences  
  • 3. Background   •  Objec)ve-­‐C  is  layered  on  top  of  the  C  –   language   –  Based  on  SmallTalk-­‐80   –  Designed  in  early  1980s   •  NeXT  SoLware  licensed  Objec)ve-­‐C  in  1988   •  Apple  Computer  acquired  NeXT  in  1996   •  Today:  na)ve  language  for  developing  Mac  OS   X  -­‐  and  iPhone  -­‐  apps  
  • 7. Simple  makefile   MyPoint : MyPoint.m main.m clang -fno-objc-arc -framework foundation MyPoint.m main.m -o MyPoint run : ./MyPoint clean : rm MyPoint
  • 8. Compiling  and  Running   TB308POHJUS-L-2:point pohjus$ ls -al total 32 drwxr-xr-x 6 pohjus staff 204 18 Tou 15:32 . drwxr-xr-x 3 pohjus staff 102 18 Tou 14:52 .. -rw-r--r--@ 1 pohjus staff 196 18 Tou 15:25 MyPoint.h -rw-r--r--@ 1 pohjus staff 268 18 Tou 15:23 MyPoint.m -rw-r--r--@ 1 pohjus staff 339 18 Tou 15:25 main.m -rw-r--r--@ 1 pohjus staff 120 18 Tou 15:14 makefile TB308POHJUS-L-2:point pohjus$ make clang -fno-objc-arc -framework foundation MyPoint.m main.m -o MyPoint TB308POHJUS-L-2:point pohjus$ make run ./MyPoint 2009-05-18 15:32:46.339 MyPoint[8725:807] X = 0 and Y = 0 2009-05-18 15:32:46.341 MyPoint[8725:807] X = 8 and Y = 7 TB308POHJUS-L-2:point pohjus$
  • 9. Instan)a)ng  an  Object   // Declare a pointer to the object MyPoint* point; // Allocate memory for the object point = [MyPoint alloc]; // Initialize the object point = [point init];
  • 10. Instan)a)ng  an  Object:  One  Liner   // Allocate and initialize the object MyPoint* point1 = [[MyPoint alloc] init];
  • 11. Messages  (Methods)   - (void) setX: (int) n;! method  type:   return  type   selector  name   argument  type   argument   +  =  class  method       name   -­‐  =  object  method    
  • 12. Messages,  with  Two  Arguments   Declara=on   - (void) setXAndY: (int) x: (int) y Usage   [object setXAndY: 5: 6]; Declara=on,  be@er  way   - (void) setX: (int) x andY: (int) y Usage   [object setX: 5 andY: 6];
  • 14. MEMORY  MANAGEMENT  AND  OBJECT   LIFECYCLE    
  • 15. Memory  Handling  in  General   •  When  allocate  something  it  must  be  released   –  Memory  consump)on   •  In  Java,  garbage  collector  takes  care  of  the   release.  Separate  thread  looking  for  objects   that  can  be  released   •  In  Obj-­‐C  and  C/C++,  programmer  is   responsible  about  the  release.  
  • 16. About  Pointers   •  int  a  =  5;   –  Holds  one  integer  value   –  The  integer  is  stored  in  some  memory  address   •  Where?   –  You  can  get  the  memory  address  by  using  &  in   front  of  the  variable:  &a  
  • 17. Example  of  Memory  Address   int main(int argc, char *argv[]) { int a = 5; // prints 5 NSLog(@"%i", a); // prints something like 0x7fff5fbff9cc NSLog(@"%p", &a); return 0; }
  • 18. Pointers   •  Pointer  is  a  variable  that  stores  memory   address   •  int  a;   –  holds  integer  variable   •  int*  b;   –  holds  memory  address  that  points  to  integer  value   •  int*  b  =  &a;   –  Now  b  has  the  memory  address  of  a  
  • 19. Example  about  Pointers   #import "MyPoint.h" int main(int argc, char *argv[]) { int a = 5; // Store a's memory address to variable b int *b = &a; // prints 5 NSLog(@"%i", a); // prints something like 0x7fff5fbff9cc NSLog(@"%p", &a); // prints something like 0x7fff5fbff9cc NSLog(@"%p", b); // prints 5 NSLog(@"%i", *b); return 0; }
  • 20. What  is  the  result  now?   int main(int argc, char *argv[]) { int a = 5; // Store a's memory address to variable b int *b = &a; if(b == &a) { NSLog(@"Do we go here?"); } if(*b == a) { NSLog(@"What about here?"); } return 0; }
  • 21. What  is  the  result  now?   int main(int argc, char *argv[]) { int a = 5; int *b = &a; *b = 10; NSLog(@"%i", a); return 0; }
  • 22. Memory  Areas   •  Memory  can  be  divided  into  three  categories   1.  Global  or  sta)c   2.  Stack   3.  Heap  
  • 23. Sta)c   •  When  something  is  in  sta)c  memory,  it's  there   all  the  )me  when  app  is  running   •  So  when  star)ng  the  app,  the  memory  is   allocated  an  when  the  app  closes,  the  memory   is  deallocated   •  The  variable  is  stored  in  the  same  memory   address  all  the  )me.  
  • 24. Example  of  Sta)c  Memory   int thisIsStoredInStaticMemory = 5; int main(int argc, char *argv[]) { static int thisIsAlsoStoredInStaticMemory = 10; NSLog(@"My number = %i", thisIsStoredInStaticMemory); NSLog(@"My number = %i", thisIsAlsoStoredInStaticMemory); return 0; }
  • 25. Stack  -­‐  Memory   •  Stack  –  memoryarea  is  usually  small   •  If  you  put  too  much  "stuff"  into  stack,  you   might  get  stack  overflow   •  Local  variables  are  stored  in  stack!   •  Variables  are  released  when  out  of  scope  
  • 26. Example  of  Stack  Memory   int main(int argc, char *argv[]) { int stack1 = 3; NSLog(@"My number = %i", stack1); if(YES) { int stack2 = 4; NSLog(@"My number = %i", stack2); // stack2 is released from memory now. } // stack1 is released from memory now. return 0; }
  • 27. Example  of  Stack  Memory   int main(int argc, char *argv[]) { if(YES) { int stack2 = 4; } // Does this work? NSLog(@"My number = %i", stack2); return 0; }
  • 28. Heap  -­‐  Memory   •  Heap  –  memory  is  the  large  memory  area   where  almost  all  of  the  objects  go.   •  Programmer  is  responsible  for  releasing  the   objects!    
  • 29. Example  of  Heap  -­‐  memory   #import "MyPoint.h" int main(int argc, char *argv[]) { MyPoint* point = [MyPoint alloc]; //... [point release]; return 0; }
  • 30. Crea)ng  a  Object   •  The  crea)on  of  an  object  is  done  in  two  parts   •  1)  Alloca)ng  memory   –  MyPoint* point = [MyPoint alloc]; •  2)  Ini)alize  object  state   –  point = [point init]; •  Combined   –  MyPoint* point = [[MyPoint alloc] init]; •  ó   –  MyPoint* point = [MyPoint new];
  • 31. What  happens  in  Memory?   •  What  happens  in  here?   –  MyPoint* p = [MyPoint alloc]; •  Two  things!   –  MyPoint* p; –  p = [MyPoint alloc]; •  p  is  in  stack  –  memory!   •  MyPoint  object  is  in  heap  memory!  
  • 32. Problem?   #import "MyPoint.h" int main(int argc, char *argv[]) { if(YES) { MyPoint* point = [MyPoint alloc]; } [point release]; return 0; }
  • 33. Problem?   #import "MyPoint.h" int main(int argc, char *argv[]) { MyPoint* point = [MyPoint alloc]; point = [MyPoint alloc]; [point release]; return 0; }
  • 34. init-­‐method?   •  init-­‐method  is  implemented  in  NSObject •  You  can  however  implement  your  own  init-­‐ method   - (id) initWithName: (NSString*) aName { if(self = [super init]) { name = aName; } return self; }
  • 35. Other  init-­‐methods   •  Like  in  Java  and  C++,  one  can  have  mul)ple   constructors   •  In  Obj-­‐C,  one  can  have  mul)ple  init-­‐methods   -  (id) init -  (id) initWithX: (int) aX; -  (id) initWithX: (int) aX andY: (int) aY
  • 36. Deallocing  Object  and  Reference  Count   •  Rules  about  reference  coun=ng   –  When  object  is  created  its  reference  count  is  set  to  1   –  Incremen)ng  the  reference  count:   •  [point retain]; –  Decreasing  reference  count   •  [point release]; –  When  reference  count  reaches  to  0,  dealloca=ng  occurs   •  ARC  will  save  you  from  this!  
  • 37. Reference  Count  Example   #import <Foundation/Foundation.h> @interface Cat : NSObject { } - (void) printMyRetainCount; @end @implementation Cat - (void) printMyRetainCount { NSLog(@"Retain count = %i", [self retainCount]); } @end
  • 38. Reference  Count  Example   int main(int argc, char *argv[]) { Cat* myCat = [[Cat alloc] init]; [myCat printMyRetainCount]; // Retain count = 1 Cat* reference = myCat; [reference retain]; [myCat printMyRetainCount]; // Retain count = 2 [myCat release]; [myCat printMyRetainCount]; // Retain count = 1 [myCat release]; // Deallocation return 0; }
  • 39. dealloc •  You  can  implement  a  dealloc  method   (void) dealloc { // Some code [super dealloc]; }
  • 40. Reference  Count  Example   #import <Foundation/Foundation.h> int main(int argc, char *argv[]) { @interface Cat : NSObject .... { Cat* mirri = [[Cat alloc] init]; NSString* name; [mirri setName: someName]; } // What happens now? [someName release]; - (void) setName: (NSString *) theName } @end Since  reference  count  is   0,  dealloca)on  occurs.   @implementation Cat This  means,  that  the  Cat   does  not  have  a  name   - (void) setName: (NSString *) theName anymore.   { name = theName; } @end
  • 41. Reference  Count  Example   #import <Foundation/Foundation.h> int main(int argc, char *argv[]) { @interface Cat : NSObject .... { Cat* mirri = [[Cat alloc] init]; NSString* name; [mirri setName: someName]; } // What happens now? [someName release]; - (void) setName: (NSString *) theName } @end Since  reference  count  is   1,  dealloca)on  does  not   @implementation Cat occur  and  the  Cat  s)ll   has  it's  name.   - (void) setName: (NSString *) theName { [name release]; name = theName; [name retain]; } @end
  • 42. Copying  a  Object   - (void)setName:(NSString *)theName } [name release]; name = [theName copy]; }
  • 43. Autorelease  Pool   •  Every  Founda)on  program  must  set  up   autorelease  pool  for  the  Founda)on  objects   •  Pool  keeps  track  of  your  objects  for  later   release   –  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; –  ... –  [pool drain];
  • 44. Method  Names   •  If  method  name  includes  alloc  or  copy,  it   returns  a  object  that  must  be  released   –  // Must be released –  NSObject* object = [[NSObject alloc] init]; –  // Must be released –  NSObject* copy = [object copy]; –  // Do not have to release –  NSMutableString* string = [NSMutableString string]; •  The  above  string  is  released  in  Autorelease  Pool!
  • 45. Problem   // Programmer A code [[someObject giveCat] eat]; // Programmer B code - (Cat*) giveCat { // Must be released! Cat* myCat = [[Cat alloc] init]; // But where? Should the programmer who calls this method be // responsible for deallocation of the Cat? How does the programmer // know this? return myCat; } ..
  • 46. Solu)on   // Programmer A code [[someObject giveCat] eat]; // Programmer B code - (Cat*) giveCat { // Must be released! Cat* myCat = [[Cat alloc] init]; // But where? When autopool is drained! [myCat autorelease]; return myCat; }
  • 47. Delayed  Release   •  Autorelease  means  "send  release  message   later".   •  Release  message  is  sent  when  Autorelease   Pool  is  released   •  Autorelease  Pool  is  created  and  released  in   UIKit  programs  automa=cally!   –  Pool  is  created  at  the  beginning  of  an  event  cycle   –  Pool  is  released  at  the  end  of  an  event  cycle  
  • 48. Autorelease  Pools   Event  loop   Pool   released   Pool   created   App  Loaded   Wait  for  Event   Handle  event   Exit  app  
  • 49. Autorelease  Pool  Usage   // Method - (Cat*) giveCat { // Must be released! Cat* myCat = [[Cat alloc] init]; // But where? When autopool is drained! [myCat autorelease]; return myCat; } // Usage Cat* someCat = [object giveCat]; // someCat will be released in some time, so if you want to hold it, use // retain [someCat retain];
  • 50. Rules   •  If  method  name  contains  "alloc",  "new"  or   "copy",  you  must  remember  to  use  release or  autorelease –  Example:  alloc, newObject, mutableCopy •  If  you  retain something,  you  must  use   release or  autorelease •  Instance  Variables:  retain  or  copy   •  autorelease  means  "send  release later"  
  • 51. Cat.h   #import <Foundation/Foundation.h> @interface Cat : NSObject { @private NSString* name; } - (id) initWithName: (NSString*) aName; - (void) setName: (NSString*) aName; - (NSString*) getName; - (void) dealloc; @end
  • 52. Cat.m   #import "Cat.h" - (void) setName: (NSString*) aName { @implementation Cat if(aName != name) { - (id) initWithName: (NSString*) aName [name release]; { name = aName; if(self = [super init]) [name retain]; { } [self setName: aName]; } } return self; } - (void) dealloc { - (NSString*) getName [name release]; { [super dealloc]; return name; } } @end
  • 53. main.m   #import "Cat.h" // Get the name NSString* name = [cat getName]; int main(int argc, char *argv[]) { // Print the name NSAutoreleasePool *pool = NSLog(name); [[NSAutoreleasePool alloc] init]; // Release name and cat // Create the string [cat release]; NSString* catName = [[NSString alloc] initWithString: @"Jack"]; [pool drain]; // Create cat with the string return 0; Cat* cat = [[Cat alloc] }   initWithName: catName]; // Just testing. This does not deallocate catName! [catName release];
  • 54. ARC  to  the  rescue!   MANAGING  MEMORY  WITH  ARC  
  • 55. ARC?   •  ARC  (Automa=c  Reference  Coun=ng)   –  Compiler  does  automa/c  reference  coun/ng  by   examining  the  source  code  and  then  add  the   retain  and  release  messages  to  objects   •  Not  garbage  collec)on,  no  background   process  of  dealloca)on  of  objects!   •  Inserts  retain  and  release  statements  based   on  some  fixed  rules   •  OS  X  10.7  and  iOS  5  for  all  features  
  • 56. Object  lose  owners   // Scenario 1 Person* jack = [[Person alloc] init]; jack = [[Person alloc] init]; // Scenario 2 Person* tina = [[Person alloc] init]; tina = nil; // Scenario 3 if(yes) { Person* dave = [[Person alloc] init]; }
  • 57. Some  Fixed  rules   •  If  object  is  allocated  and  local  to  method,   release  statement  is  added  near  the  end  of   that  method   •  If  allocated  object  is  class  a@ribute,  release  is   added  to  dealloc   •  If  the  object  is  return  value,  it  gets  an   autorelease  statement  
  • 58. Guidelines   •  Don’t  call!   –  retain, release, retainCount, autorelease or dealloc •  You  must  use  @autoreleasepool  syntax   •  You  must  enable  ARC   –  clang -fobjc-arc -framework foundation Car.m Motor.m main.m -o App
  • 59. makefile   MyPoint : Car.m Motor.m main.m clang -fobjc-arc -framework foundation Car.m Motor.m main.m -o App run : ./App clean : rm App
  • 71. Property  Declara)on  Aoributes:   Writability   •  You  can  decorate  a  property  with  aoributes,   example:   –  @property (readonly) int x; •  readwrite –  Indicates  that  the  property  is  read/write.  Default   •  readonly –  Only  read   –  Generates  only  geoer  method  
  • 72. Seoer  Seman)cs   •  assign –  Simple  seoer.  Default.   •  weak –  Non-­‐owning  rela)onship  with  an  object   –  If  object  is  deallocated,  the  property  is  set  to  nil   •  strong –  Owning  rela)onship  with  an  object   •  copy –  Specifies  that  a  copy  of  the  object  should  be  used  for   assignment  
  • 73. Seoer  Seman)cs  Examples   // assign property = newValue; // copy if (property != newValue) { [property release]; property = [newValue copy]; }
  • 74. Atomicity   •  nonatomic –  Specifies  that  accessor  are  non-­‐atomic.     •  Proper)es  are  atomic  by  default:   –  [_internal lock]; –  id result = [[value retain] autorelease]; –  [_internal unlock]; –  return id;
  • 78.
  • 80.
  • 82. About  Strings   •  C  String   –  char * // Array of characters •  NSString –  Object,  that  holds  array  of  Unicode  characters   –  Is  immutable,  contents  cannot  be  changed   aLerwards!   •  NSMutableString –  String  that  can  be  modified  aLerwards  
  • 83. Crea)ng  Strings   // Simple way NSString *temp1 = @"Hello World!"; // Appending, notice that this produces new string NSString *beginning = @"beginning"; NSString *alphaAndOmega = [beginning stringByAppendingString:@" and end"];
  • 84. Formapng   •  Formapng   –  NSString *string1 = [NSString stringWithFormat:@"A string: %@, a float: %1.2f", @"string", 31415.9265]; –  // string1 is "A string: string, a float: 31415.93" •  Format  Specifiers?   –  http://developer.apple.com/iphone/ library/documentation/Cocoa/Conceptual/ Strings/Articles/formatSpecifiers.html#// apple_ref/doc/uid/TP40004265-SW1
  • 85. NSString  methods   •  See:   –  http://developer.apple.com/documentation/ Cocoa/Reference/Foundation/Classes/ NSString_Class/Reference/NSString.html
  • 86. NSMutableString methods   •  NSMutableString inherites  NSString •  With  NSMutableString you  can  modify  the   string  with  these  methods   – appendFormat: – appendString: – deleteCharactersInRange: – insertString:atIndex: – replaceCharactersInRange:withString: – replaceOccurrencesOfString:withString:options:range: – setString:
  • 88. Protocols?   •  Compared  to  Java,  protocols  are  interfaces   •  You  define  methods  that  some  object  must   implement      
  • 89. Using  Protocols   // MyProtocolName.h // Notice that the protocol inherites NSObject // protocol! @protocol MyProtocolName <NSObject> //Method declarations go here @end // MyObject @interface Class: NSObject <MyProtocolName>  
  • 90. Protocol  as  Variable   •  In  Java   –  MyInterface object = new MyObject(); •  In  Obj-­‐C   –  id<MyProtocolName> object = [[MyObject alloc] init]; •  As  a  method  argument   –  (void) doSomethingWithThisObject: (id<MyProtocolName>) aObject •  ID  is  a  predefined  pointer  type  for  an  arbitrary   object    
  • 92. NSObject   •  NSObject  is  the  root  class  of  Most  Obj-­‐C   classes   •  Crea)ng,  copying,  dealloca)ng  objects    
  • 93. Collec)ons   •  Array:  Ordered  Collec/ons   •  Dic)onary:  Collec/ons  of  Keys  and  Values   •  Set:  Unordered  Collec/ons  of  Objects   •  Counted  Sets:  Unordered  Collec/on  of   Indis/nct  Objects   •  Enumera)on:  Traversing  a  Collec/on's   Elements   •  Mutable  and  immutable  versions!  
  • 94. Other  Classes   •  NSNumber,  wrapper  for  standard  number   types   •  NSDate,  NSCalendarDate