I do not quite understand the way of declaring instance variable and property. Can someone explain in detail the difference of the two codes below? In the second method, if I use _name
for instance variable
, is it the same function as the way declaring name
in first code? Thanks!
First Code:
// OrderItem.h
#import <Foundation/Foundation.h>
@interface OrderItem : NSObject
{
@public NSString *name;
}
-(id) initWithItemName: (NSString *) itemName;
@end
// OrderItem.m
#import "OrderItem.h"
@implementation OrderItem
-(id) initWithItemName: (NSString *) itemName {
self = [super init];
if (self) {
name = itemName;
NSLog(@"Initializing OrderItem");
}
return self;
}
@end
Second Code:
// OrderItem.h
#import <Foundation/Foundation.h>
@interface OrderItem : NSObject
@property (strong,nonatomic) NSString *name;
-(id) initWithItemName: (NSString *) itemName;
@end
// OrderItem.m
#import "OrderItem.h"
@implementation OrderItem
-(id) initWithItemName: (NSString *) itemName {
self = [super init];
if (self) {
_name = itemName;
NSLog(@"Initializing OrderItem");
}
return self;
}
@end