相关疑难解决方法(0)

Objective C消息调度机制

我只是盯着玩Objective C(编写玩具iPhone应用程序),我很好奇用于发送消息的底层机制.我非常了解C++中的虚函数通常是如何实现的,以及相对于静态或非虚方法调用的成本是多少,但我没有任何Obj-C背景知道如何发送消息.浏览我发现这个松散的基准测试,它提到IMP缓存的消息比虚函数调用更快,而虚拟函数调用反过来比标准消息发送更快.

我不是要优化任何事情,只是更深入地了解消息的分派方式.

  • 如何发送Obj-C消息?
  • 实例方法指针如何被缓存,你是否(通常)通过阅读代码告诉消息是否会被缓存?
  • 类方法本质上与C函数(或C++中的静态类方法)相同,还是有更多的东西?

我知道其中一些问题可能是"依赖于实现的",但实际上只有一个实现非常重要.

performance objective-c

59
推荐指数
2
解决办法
2万
查看次数

使用NSMutableDictionary作为属性的后备存储

我正在寻找一种简单的方法来将我的属性直接设置为NSMutableDictionary,它是一个实例变量.即:

KVCModle.h:

@interface KVModel : NSObject {
    NSMutableDictionary * data;
}
@property(nonatomic,assign)NSString * string1;
@property(nonatomic,assign)NSString * string2;
@end
Run Code Online (Sandbox Code Playgroud)

KVCModel.m

#import "KVModel.h"


@implementation KVModel

-(id)init
{
    self = [super init];
    if(self)
    {
        data = [[NSMutableDictionary alloc] init];
    }
    return self;
}

-(NSString *)string1
{
    return [data objectForKey:@"string1"];
}
-(NSString *)string2
{
    return [data objectForKey:@"string2"];
}
-(void)setString1:(NSString *)_string1
{
    [data setObject:_string1 forKey:@"string1"];
}
-(void)setString2:(NSString *)_string2
{
    [data setObject:_string2 forKey:@"string2"];
}
-(void)dealloc
{
    [data release];
    [super dealloc];
}

@end
Run Code Online (Sandbox Code Playgroud)

我试图重写setValue:ForKey:valueForKey: …

iphone cocoa objective-c ios

4
推荐指数
2
解决办法
1545
查看次数

标签 统计

objective-c ×2

cocoa ×1

ios ×1

iphone ×1

performance ×1