Previously we learn how to use directives in ObjC: Objective-C : Property and Synthesize directive 

Objective-C arrays allow you to define type of variables that can hold several data items of the same kind but structure is another user-defined data type available in Objective-C programming which allows you to combine data items of different kinds.

Structures are used to represent a record, Suppose you want to keep track of your books in a library. You might want to track the following attributes about each book:

  • Title
  • Author
  • Subject
  • Book ID


Defining a Structure

To define a structure, you must use the struct statement. The struct statement defines a new data type, with more than one member for your program. The format of the struct statement is this:

struct [structure
   member definition;
   member definition;
    member definition;
} [one or more structure variables]; 

The structure tag is optional and each member definition is a normal variable definition, such as int i; or float f; or any other valid variable definition. At the end of the structure's definition, before the final semicolon, you can specify one or more structure variables but it is optional. Here is the way you would declare the Book structure:

struct Books
   NSString *title;
   NSString *author;
    NSString *subject;
    int  book_id;
} book; 


Structure (structs)

Structs are a C construct that allows for grouping of items into one variable. For example, if you wanted to store a date, you could use three separate variables for the day, month, and year. This approach would work if you had to store one or two dates. But if you’re writing a calendar application, for example, having to keep track of which month belonged with which year would be a nightmare. Fortunately, C structs allow you to group these values into one type. The syntax for a date struct might look like this:

struct date {int month; int day; int year;};


You can then define a variable of this type as struct date today, yesterday;. However, we can use our friend the typedef statement to make this code a bit neater:

typedef struct {int month; int day; int year;} Date;
Date today, yesterday; 


To access values within a struct, you use the dot operator. To set the month, you might write today.month = 5;. To get a value, the same procedure applies: int year = today.year;.

In action, it might look like this:

#import <Foundation/Foundation.h>
int main (int argc, char *argv[]){
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    typedef struct {int month; int day; int year;} Date;
    Date today;
    today.month = 5; = 22;
    today.year = 2011;

    NSLog(@"Today's date is %i/%i/%i", today.month,, today.year);
    [pool drain];
    return 0;

After execution the result will look like this:

2015-07-13 04:36:58.342 demo[11911] Today's date is 5/22/2011


Initializing Structures

The fastest way to initialize a structure is to enclose the values in a pair of braces:

Date today = {5, 22, 2011}; You can list fewer values, and they will be filled in until the end of the values you list. The remaining values will be undefined.

Date today = {5}; This sets the month to 5, but leaves the remaining fields with garbage values from RAM.

You can also initialize the values out of order:

Date today = {.day = 22, .month = 5; .year = 2011};

Structs Within Structs

C allows you to put structs with structs. For example, Apple provides the CGRect data type, which defines a data type by being a struct containing a CGPoint and CGSize:

struct CGRect {
    CGPoint origin;
    CGSize size;
typedef struct CGRect CGRect;

You can then access the values by chaining the dot operator. To get the width, you would write float width = rect.size.width; 


Next, we will learn about: Objective-C : Unions

  Modified On Nov-30-2017 06:34:31 AM

Leave Comment