What is wrong with the following piece of code ?

@interface MyArticleClass : NSObject

@property (nonatomic, strong) NSString *title;
@property (nonatomic, strong) NSString *description;


The title of this post has already given this away. We can’t use description as a property name and here’s why.

NSObject already has a description method which by default returns a string with the object name and memory address. Subclasses can override this method to return a more descriptive string. This can help print out useful information to aid debugging when using NSLog or the po in the debug console.

Having a description property on the subclass MyArticleClass in the example above is just asking for trouble. The code will have no issues compiling, it will probably work fine until you use it with core data. See this stackoverflow link. The general rule is to avoid using property names of methods or properties declared in parent classes unless its specifically to override them.

That being said, do make use of description to aid your debugging


@interface MyArticleClass : NSObject

@property (nonatomic, strong) NSString *title;
@property (nonatomic, strong) NSString *articleDescription;



@implementation MyArticleClass

- (NSString *)description
    return [NSString stringWithFormat:@"MyArticleClass: %p %@ - %@",self, self.title, self.articleDescription];



MyArticleClass *article = [[MyArticleClass alloc] init];
article.title = @"iOS Tips";
article.articleDescription = @"The first iOS tips post!"; 
NSLog(@" %@ ", article);


MyArticleClass: 0x74d5920 iOS Tips - The first iOS tips post!