程序员教你如何用代码创建一个 女朋友

马上就要回家过年了,身为伟大的程序员,过年怎么能不带个妹子回家呢,没有妹子的怎么办?

没关系,我们new一个贝

NSMutableDictionary *me = [NSMutableDictionary dictionary];// 从 GirlEntity类 创建一个妹子GirlEntity *girl1 = [[[GirlEntity alloc] init] autorelease];girl1.name = @"妹子1";[me setObject:girl1 forKey:@"girlFriend"];

diaosi说从来没有过妹子,不知道妹子类是什么.

没关系,我们自己造

// 创建一个NSObject对象, 然后添加属性,把他设置成妹子NSObject *girl2 = [[[NSObject alloc] init] autorelease];objc_setAssociatedObject(girl2, "name", @"妹子2", OBJC_ASSOCIATION_COPY);[me setObject:girl2 forKey:@"girlFriend2"];

屌丝说这样还不够彻底.

没关系,我们自己new一个类出来

// 动态创建一个妹子类,然后创建一个妹子const char *className = "Girl3";Class kclass = objc_getClass(className);if (!kclass){Class superClass = [NSObject class];kclass = objc_allocateClassPair(superClass, className, 0);}NSUInteger size;NSUInteger alignment;NSGetSizeAndAlignment("*", &size, &alignment);class_addIvar(kclass, "name", size, alignment, "*");// 注册到运行时环境objc_registerClassPair(kclass);id girl3 = [[[kclass alloc] init] autorelease];object_setInstanceVariable(girl3, "name", "妹子3");[me setObject:girl3 forKey:@"girlFriend3"];

如果想带女神回去怎办?

没关系,我们可以挖墙角

// 挖墙角GirlEntity *girl4 = [[[GirlEntity alloc] init] autorelease];girl4.name = @"女神";SEL original = @selector(talk);SEL replacement = @selector(talk2);Method a = class_getInstanceMethod([GirlEntity class], original);Method b = class_getInstanceMethod([self class], replacement);if (class_addMethod([GirlEntity class], original, method_getImplementation(b), method_getTypeEncoding(b))){class_replaceMethod([GirlEntity class], replacement, method_getImplementation(a), method_getTypeEncoding(a));}else{method_exchangeImplementations(a, b);}[girl4 talk];-(void) talk2{NSString *name = [self valueForKey:@"name"];if ([name isEqualToString:@"女神"]) {// do 你懂的NSLog(@"%s", __FUNCTION__);}}

,而消极的人则在每个机会都看到某种忧患。

程序员教你如何用代码创建一个 女朋友

相关文章:

你感兴趣的文章:

标签云: