@dynamicはアクセサ作成をするわけではないので厳密に言うとタイトルは違うけど.
@synthesizeと@dynamicの違いは基本的なポイントだけど,きちんと理解して使い分けないと思わぬところでハマる.
CoreDataを使うためにNSManagedObjectを継承した専用クラスを作ったとき,属性へのアクセサを作るためにヘッダに@property XXX;,*.mに@dynamic XXX;と書く.@dynamicにするのはNSManagedObject側で各属性のセッタ/ゲッタを作ってくれるから.
このとき@dynamicではなく@synthesizeとしてしまうとCoreData用のアクセサ(-setValue:forKey:)が使われず,普通のアクセサが作られる.
つまりNSManagedObjectを変更しているつもりが変更されず,CoreDataに編集データが保存されないというバグになる.一見挙動が同じように見える(値の編集や取得も出来ているように見える)分困る…
MyObj.h
# import <Foundation/Foundation.h>
@interface MyObj : NSManagedObject
@property (retain) NSString *name;
@end
MyObj.m
# import "MyObj.h"
@implementation MyObj
@dynamic title;
// @synthesize title; // <- NG!
@end