ããããã£ã®è©±ã4åç®ã«ãªã£ããä»åã¯ãããããã£ã®å±æ§ã®è©±ãããããå®éã«ããããã£ã䜿ã£ãããã°ã©ãã³ã°ãããŠãããšãé©åãªå±æ§ã®èšå®ããšãŠã倧åã ãšããããšã«æ°ã¥ãã ããã
屿§ã®ææ³
屿§ãšã¯ãããããã£ã修食ãããã®ã«ãªããããããã£ãèšå®ããã³ãŒããã³ã³ãã€ã«ãããšãããã«åãããã¢ã¯ã»ããµã¡ãœãããäœã£ãŠãããã®ã ãããã®ã¡ãœããã®çš®é¡ãåäœã«ã€ããŠãããã€ãã®çްããèšå®ãå¯èœã«ããã®ã屿§ã ã
ææ³ãšããŠã¯ã@propertyæç€ºåã®åŸã«ãæ¬åŒ§ãä»ããŠæå®ããããšã«ãªããè€æ°ã®å±æ§ãæå®ãããšãã¯ãã«ã³ãã§åºåããããšãã°ã次ã®ã³ãŒãã§ã¯assignãšreadwriteãšãã2ã€ã®å±æ§ãæå®ããŠããã
@property (assign, readwrite) NSString* value;
ã©ããªå±æ§ãå®çŸ©ãããŠããã®ãã詳ãã玹ä»ãããã
ã¢ã¯ã»ãµã®ååãšçš®é¡
ããããã£ã¯ãåºæ¬çã«ã¯ãããæŒç®åã§ã¢ã¯ã»ã¹ãããã ãããã®ã¢ã¯ã»ã¹ã¯ãçµæçã«ã¯å¯Ÿå¿ããã¢ã¯ã»ãµã¡ãœããã®åŒã³åºããšãªãããããã£ãŠãçŽæ¥ã¡ãœããåŒã³åºãã®åœ¢ã§èšè¿°ããŠããçµæã¯åãã«ãªãã
ããŠããã®ã¢ã¯ã»ãµã¡ãœããã¯ã³ã³ãã€ã©ãèªåçã«äœã£ãŠãããã®ã ãããã®ååã¯ã©ããªãã®ã ãã? ããã¯ãããŒå€ã³ãŒãã£ã³ã°ã®ã«ãŒã«ã«åã£ãŠä»ããããããšã«ãªããããŒå€ã³ãŒãã£ã³ã°ã¯ãMac OS X 10.3(Panther)ã®æä»£ã«Cocoaãã€ã³ãã£ã³ã°ã®äžéšãšããŠè¿œå ããããã®ã ããããŸãCocoaã®ãããããšããã§äœ¿ãããŠãã(ããŒå€ã³ãŒãã£ã³ã°ã«ã€ããŠã¯ããTigerã®Cocoaã«ã¿ãMVCã®å®æããåç §ããŠã»ãã)ã
ãã®èªåçã«ä»ããããåå以å€ã«ãèªåã§ååãæå®ããããšãã§ããããã®ããã«äœ¿ãããã®ãã屿§ã®getterããã³setterã ãgetterã¯èªã¿èŸŒã¿ãsetterã¯æžã蟌ã¿ã®ããã®ã¢ã¯ã»ãµã®ååãæå®ãããæ¬¡ã®ããã«äœ¿ãã
@property (getter=isEnabled, setter=makeEnable:) BOOL enabled;
getterã¡ãœããã¯ãåŒæ°ã¯ãªãã§ãããããã£ã®å€ãè¿ããã®ãsetterã¡ãœããã¯ãããããã£ã®åã®åŒæ°ã1ã€åããè¿ãå€ã¯voidåã«ãªããã®ã«ãªããæ³šæããŠã»ããã®ã¯ãsetterã¯åŒæ°ãåãã®ã§ãæåŸã«ã³ãã³ãä»ããŠãããªããŠã¯ãããªãããšã ãObjective-Cã§ã¯ãåŒæ°ã¯å¿ ãã³ãã³ã®åŸã«æ¥ãããã®ã³ãã³ãå¿ãããšãã³ã³ãã€ã«ãéããªãã
ããããã£ã¯ããã©ã«ãã§ã¯èªã¿æžãå¯èœã ããèªã¿èŸŒã¿å°çšã«ãããå Žåãããã ããããããªãšãã¯ãreadonly屿§ã䜿ãããããæå®ããããããã£ã¯èªã¿èŸŒã¿å°çšãšãªãããããæŒç®åã§æžã蟌ãããšãããšãã³ã³ãã€ã«ããšã©ãŒãšãªããç¡çç¢çã¡ãœããåŒã³åºãã§æžã蟌ãããšããŠãã察å¿ããã¢ã¯ã»ããµãäœãããªããããå®è¡æã«ãšã©ãŒãšãªãã
ããããã£ãèªã¿æžãå¯èœã§ããããšãæç€ºãããå Žåã¯ãreadwrite屿§ã䜿ãããšãã§ããã
@property (readwrite) NSString* fullName;
@property (readonly) NSString* firstName;
èšå®ããããªããžã§ã¯ãã®ä¿æ
ããããã£ã®åããªããžã§ã¯ãã§ããããæžã蟌ã¿å¯èœãªå Žåããããã©ããã£ãŠä¿æããããåé¡ã«ãªã£ãŠãããäœãåé¡ã«ãªããã¯ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãæå¹ã«ããŠãããã©ããã§å€ãã£ãŠããã
ãŸããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãç¡å¹ã«ããŠããå Žåãã説æãããããã®ãšãã¯ããªããžã§ã¯ãã®ãªãŒããŒã·ãããã©ããã¹ãããæ°ã«ããªããŠã¯ãããªããã€ãŸããretainãåŒãã§ãã®ãªããžã§ã¯ããä¿æããã®ãããŸãã¯åã«åç §ãæã€ã ããããšããããšã ã
ãã®æåããããããã£ã®å±æ§ã§æå®ããããšãã§ãããretainãåŒã¶ãšãã¯retain屿§ãåã«åç §ãæã€ã ãã®ãšãã¯assign屿§ãæå®ããã
@property (retain) NSString* title;
@property (assign) id delegate;
ã€ãŸããäžã«ç€ºããäŸã¯ã次ã®ãœãŒã¹ã³ãŒããšåçã«ãªãã ããã
// retain屿§ãæå®ããå Žå
- (void)setTitle:(NSString*)title
{
if (_title != title) {
[_title release];
_title = [title retain];
}
}
// assign屿§ãæå®ããå Žå
- (void)setDelegate:(id)delegate
{
_delegate = delegate;
}
ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãæå¹ã«ããŠããå Žåã¯ããã®ãããªé¢åãªããšãæ°ã«ããå¿ èŠã¯ãªããretainã¡ãœããã¯ç¡å¹åãããŠãããåç §ããŠãããã©ããã§ããã®ãªããžã§ã¯ããè§£æŸããããã©ãããæ±ºãŸãããã ã
ãã1ã€ããªããžã§ã¯ãã®ä¿æã«é¢ãã屿§ããããcopy屿§ã ãããã¯ãæå®ããããªããžã§ã¯ãããã³ããŒããŠä¿æããããšã«ãªãã
@property (copy) NSString* value;
察å¿ããã³ãŒãã¯ã次ã®ããã«ãªãã ããã
- (void)setValue:(NSString*)value
{
[_value release];
_value = [value copy];
}
ãã®retainãassignãcopyã®äœ¿ãåãæ¹ã ããå°ããããããããŸãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãç¡å¹ã®ç¶æ ã§ã¯ãå¿ ãã©ãã1ã€ãæå®ããããæå®ããªããšã³ã³ãã€ã«æã«èŠåãçºçããŠãassignãé©çšãããã
ããã«å¯ŸããŠã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãæå¹ã®å Žåã¯ãå¿ ãããæå®ããªããŠããããã®å Žåãassignã«ãªãããã ãããããå«ãããã®ã ãã屿§ãèšå®ããªããšãã«ããã®ããããã£ã®åãNSCopyingãããã³ã«ã«æºæ ããŠãããšãã屿§ãæå®ãããŠããªãããassignãé©çšãããããã®ãªããžã§ã¯ãã¯ã³ããŒå¯èœã ãããã³ããŒããªããšãããã®ã?ããšãã£ãæå³ã®èŠåãçºçããã
çµå±ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãæå¹ã§ãã£ãŠããassignãcopyããæç€ºçã«æå®ããŠãããæ¹ãé¢åãå°ãªãã ãããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãç¡å¹ã«ããŠretainãcopyãæå®ããå Žåã¯ãdeallocã¡ãœããã§ããããreleaseããã®ãå¿ããªãããã«ãããã