2011-07-08 22 views
8

, .m dosyasında, özel yöntemler yaratmak için hackish şekilde bir tür vardır:Objective-C ise

@interface FooClass (PrivateMethods) 
- (void) doBar:(id)barAction withBaz:(id)bazAction; 
@end 

Bu yöntemler için iyi çalışıyor. Ben bir özellik ile aynı şeyi yapmaya çalıştık:

@interface BarClass (PrivateMethods) 
@property (nonatomic, strong) BazObject *myBaz; 
@end 

@implementation BarClass 
@synthesize myBaz = _myBaz; 
[...] 
@end 

Bu

bir derleme uyarı getirdi: Mülkiyet sınıf uygulamasında hayata olamaz 'PrivateMethods' kategorisinde ilan etti. Sonra

@implementation BarClass (PrivateMethods) 
@synthesize myBaz = _myBaz; 
@end 

: Bir kategoride malımı taşımak için çalıştı @synthesize is not allowed in a category's implementation.

bariz cevaptır "sadece ivars kullanın çalışıyor çık", ama onlar' o Apple'da insanlar tarafından söylendi ve (kişisel olarak) tamamen mülkleri kullanmak için taşındı. Getirdikleri güvenlik (bir silahın güvenliği, kendinizi ayağa vurmak daha zor) beni içeride mutlu ediyor, bu yüzden çıplak ivarlara başvurmadan bunu yapmak için herhangi bir yol var mı?

cevap

4

Yaptığım şey bu ve benim için çalışıyor. Değişim, artık kategori oluşturmamanızdır. Bunun yerine, sınıfın kendisinin uzantılarını yaratıyorsunuz.

@interface BarClass() 
@property (nonatomic, retain) BazObject *myBaz; 
@end 

@implementation BarClass 
@synthesize myBaz = _myBaz; 
[...] 
@end