"Why can't I just use ==?" Since it came from C, Objective-C has the same == operator for comparing whether two things are equal. However, every Objective-C object looks just like a memory address to C. The two memory addresses will only be equal if the two objects don't just look the same, but actually are the same exact object. For example: code: NSNumber *first_one = [NSNumber numberWithInt:1]; memory: [--1--] code: NSNumber *first_one = [NSNumber numberWithInt:1]; NSNumber *second_one = [NSNumber numberWithInt:1]; memory: [--1--][--1--] Here, [first_one isEqual:second_one], but first_one != second_one, since we've made two objects, each occupying a different space in memory.