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];
但这并没有更好,因为我没有在结构中收集常见的东西......
有没有更聪明的方法?
问候,弗兰兹