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

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

没关系,我们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__);
    }
}


  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值