यदि आपकी टेबलव्यू कक्षा किसी भी संग्रहण प्रदान करती है तो यह टूट जाएगी। मैं जिस मार्ग पर जा रहा हूं उसकी अनुशंसा नहीं करता हूं। लेकिन सही विधि object_setClass(tableView, [MyTableView class])
का उपयोग करना होगा।
कृपया सुनिश्चित करें कि यह वास्तव में आप चाहते हैं।
यहां एक छोटा कोड-नमूना दिखा रहा है कि यह एक भयानक विचार है।
#import <objc/runtime.h>
@interface BaseClass : NSObject
{
int a;
int b;
}
@end
@implementation BaseClass
@end
@interface PlainSubclass : BaseClass
@end
@implementation PlainSubclass
@end
@interface StorageSubclass : BaseClass
{
@public
int c;
}
@end
@implementation StorageSubclass
@end
int main(int argc, char *argv[])
{
BaseClass *base = [[BaseClass alloc] init];
int * random = (int*)malloc(sizeof(int));
NSLog(@"%@", base);
object_setClass(base, [PlainSubclass class]);
NSLog(@"%@", base);
object_setClass(base, [StorageSubclass class]);
NSLog(@"%@", base);
StorageSubclass *storage = (id)base;
storage->c = 0xDEADBEEF;
NSLog(@"%X == %X", storage->c, *random);
}
और आउटपुट
2011-12-14 16:52:54.886 Test[55081:707] <BaseClass: 0x100114140>
2011-12-14 16:52:54.889 Test[55081:707] <PlainSubclass: 0x100114140>
2011-12-14 16:52:54.890 Test[55081:707] <StorageSubclass: 0x100114140>
2011-12-14 16:52:54.890 Test[55081:707] DEADBEEF == DEADBEEF
आप storage->c
को लिखने देख सकते हैं स्मृति उदाहरण के लिए आवंटित बाहर लिखा था, और ब्लॉक में मैं यादृच्छिक के लिए आवंटित। अगर वह एक और वस्तु थी, तो आपने अभी अपना isa
पॉइंटर नष्ट कर दिया था।
स्रोत
2011-12-14 22:45:47
कूल धन्यवाद। लेकिन, 'UITableViewController' में 'self.tableView' को' UITableView' के कस्टम सबक्लास के नए उदाहरण में सेट करना सुरक्षित है? – ma11hew28
@ जोशुआ वेनबर्ग कहते हैं, क्या आप जानते हैं कि इसका उपयोग करना बुरा होगा [सहयोगी संदर्भ] (http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocAssociativeReferences.html) मुझे पता है कि श्रेणियों के साथ उपयोग करना सुरक्षित है (इसे कई बार इस्तेमाल किया जाता है) लेकिन अगर सबक्लास को एक और चर की आवश्यकता है, तो मुझे लगता है कि यह चाल करेगा ... –
मैं उन्हें हर समय, काफी आसान उपयोग करता हूं। –