Я полагаю, вы используете ARC.
Согласно ARC, квалификация владельца свойства должна соответствовать переменной экземпляра (ivar). Так, например, если вы говорите, что свойство «сильное», то ивар также должен быть сильным.
В вашем случае вы говорите, что это свойство "assign", которое совпадает с unsafe_unretained. Другими словами, это свойство не сохраняет права собственности на заданную вами строку NSString. Он просто копирует указатель NSString *, а если NSString исчезает, он исчезает и указатель больше не действителен.
Так что, если вы это сделаете, ivar также должен быть помечен как __unsafe_unretained (если вы ожидаете, что компилятор @synthesize свойство для вас)
ИЛИ вы можете просто опустить объявление ivar и просто позволить компилятору сделать это за вас. Как это:
@interface Movie : NSObject
@property(assign) NSString *title;
@property(assign) int rating;
@property(assign) int year;
@end
Надеюсь, это поможет.