3 ms·
Fair enough. Here's how you'd make that class on the fly: Class mySubclass = objc_allocateClassPair([NSObject class], "MySubclass", 0); Here's how you'd a
by sandoze 13y ago
Fair enough.
Here's how you'd make that class on the fly:
Class mySubclass = objc_allocateClassPair([NSObject class], "MySubclass", 0);
Here's how you'd add a description method to a newly created class:
static NSString *Description(id self, SEL _cmd){
return [NSString stringWithFormat: @"<%@ %p: foo=%@>",[self class], self, [self foo]];
}
// add Description to mySubclass
// grab NSObject's description signature so we can borrow it
Method description = class_getInstanceMethod([NSObject class],
@selector(description));
const char *types = method_getTypeEncoding(description);
// now add
class_addMethod(mySubclass, @selector(description), (IMP)Description, types);
And your iVars:
class_addIvar(mySubclass, "foo", sizeof(id), rint(log2(sizeof(id))), @encode(id));
- 10char 13y agoWhat jballanc is saying is that yes these things are possible in Objective-C, but the technique of doing these tricks in Ruby/Motion is an order of magnitude simpler and idiomatic: klass = Object.const_set "MySubclass", Class.new(Object) klass.send(:attr_accessor, :foo) klass.send(:define_method, "description") { "<#{self.class}: foo=#{self.foo}>" }