8

I have a piece of code I'm using fairly often and would like to make a macro out of it. I'm not exactly sure how to do that though. Here's the code I want to use

UIImage *titleImage = [UIImage imageNamed:@"myLogo.png"];
UIImageView *titleImageView = [[UIImageView alloc] initWithImage:titleImage];
self.navigationItem.titleView = titleImageView;
[titleImageView release];

I want to define this block as a macro so I can later say for instance addImage(...); Thanks for your help.

Macmade
  • 52,708
  • 13
  • 106
  • 123
John Lane
  • 1,112
  • 1
  • 14
  • 32

4 Answers4

18
#define MY_MACRO( img ) \
    {\
        UIImage *titleImage = [UIImage imageNamed:img]; \
        UIImageView *titleImageView = [[UIImageView alloc] initWithImage:titleImage]; \
        self.navigationItem.titleView = titleImageView; \
        [titleImageView release];\
    }

Use it like this:

MY_MACRO( @"myLogo.png" )

The use of {} creates a scope block, which will prevent problems with variable redefinitions (if you have variables with the same name, where you use the macro).

Macmade
  • 52,708
  • 13
  • 106
  • 123
0

#define Image_Macro @"myLogo.png" UIImage *titleImage = [UIImage imageNamed:Image_Macro]; UIImageView *titleImageView =[[UIImageView alloc] initWithImage:titleImage]; self.navigationItem.titleView = titleImageView;

0

use #define with the preprocessor, write a function, or write a method for your class.

Antwan van Houdt
  • 6,989
  • 1
  • 29
  • 52
0

Try the following macro

#define addImage( __imageName__)    \
UIImage *titleImage = [UIImage imageNamed:__imageName__];    \
UIImageView *titleImageView = [[UIImageView alloc] initWithImage:titleImage]; \
self.navigationItem.titleView = titleImageView; \
[titleImageView release]; \
Ilanchezhian
  • 17,426
  • 1
  • 53
  • 55