私が理解できないobjcには本当に何かがあります。保持可能なプロパティを作成する方法は知っていますが、「パブリック」プロパティではなく「プライベート」プロパティのみである保持可能な「サブ」構造体フィールドを作成する方法を理解できません (プライベート プロパティは私のメソッドによってのみ管理されます)。
これが私のコードです:
struct _device_descriptor {
NSInteger accessoryNumber; // Accessory the device belongs to
NSInteger slotNumber; // Slot number used for the device
NSString* slotName; // Slot name
};
typedef struct _device_descriptor device_descriptor_t;
#define NUMBER_MAX_CARD_READERS 10
#define NUMBER_MAX_ACCESSORIES 10
@interface CardDeviceManager : NSObject {
// Card devices (among accessories)
NSInteger m_numberOfCardDevices; // Number of devices.
NSMutableArray* m_accessoryList; // List of all accessories
@private
// Accessories
NSInteger m_numberOfAccessories; // Number of accessories
NSInteger m_numberOfAcceptedAccessories;
device_descriptor_t m_cardDevice[NUMBER_MAX_CARD_READERS]; // Array of card devices.
}
メソッドでスロット名を割り当てるたびにスロット名 (構造体のスロット名) を保持したいのですが、外部からは見えないため、これはプロパティではありません。
たとえば、別の NSString で初期化するたびに、次のようにします。
//_tmpName is a NSString
// Warning: slotName must be released later since we retain it.
m_cardDevice[i].slotName = [[NSString stringWithString: _tmpName] retain];
これは「良い」(エレガントではない)方法ではないと本当に感じています。
_device_descriptor 構造体を削除して、次のようにする必要があると思います。
NSInteger accessoryNumber[NUMBER_MAX_CARD_READERS]; // Accessory the device belongs to
NSInteger slotNumber[NUMBER_MAX_CARD_READERS]; // Slot number used for the device
NSString* slotName[NUMBER_MAX_CARD_READERS];
しかし、構造体に共通のものを集めていないので、これは良くありません...
よりスマートな方法はありますか?
よろしく、フランツ