我试图围绕C与Objective-C中的使用和语法的一些差异.特别是,我想知道C运算符和Objective-C中的点运算符和箭头运算符的使用方式有何不同(以及原因).这是一个简单的例子.
C代码:
// declare a pointer to a Fraction
struct Fraction *frac;
...
// reference an 'instance' variable
int n = (*frac).numerator; // these two expressions
int n = frac->numerator; // are equivalent
Run Code Online (Sandbox Code Playgroud)
Objective-C代码:
// declare a pointer to a Fraction
Fraction *frac = [[Fraction alloc] init];
...
// reference an instance variable
int n = frac.numerator; // why isn't this (*frac).numerator or frac->numerator??
Run Code Online (Sandbox Code Playgroud)
那么,看看frac两个程序中的相同情况(即它是指向Fraction对象或结构的指针),为什么它们在访问属性时使用不同的语法?特别是,在C中,numerator可以访问属性frac->numerator,但是使用Objective-C,可以使用点运算符访问它frac.numerator.既然frac是两个程序中的指针,为什么这些表达式不同?任何人都可以帮我澄清一下吗?
我注意到了对XCode(4.6)的最新更新,我收到了关于几行的警告JSONKit.m.特别是,设置对象类的行:
dictionary->isa = _JKDictionaryClass;
Run Code Online (Sandbox Code Playgroud)
这些标记为已弃用,并注明首选方法是使用object_setClass():
object_setClass(dictionary, _JKDictionaryClass);
Run Code Online (Sandbox Code Playgroud)
当我问为什么最好只是让警告静音时,回答是:
即使新的Xcode版本抱怨,一切都运行正常,我不想:
1)测试每个项目我使用JSONKit来检查在object_setClass()后是否一切正常
2)松散的cpu周期,这就是我使用JSONKit的原因以NSJSONSerialization为例.我当前的应用程序解析权重为600K-1M的json文件
我们在这里讨论了多少性能影响?
注意:
我更感兴趣
dictionary->isa = _JKDictionaryClass VS object_setClass()
比JSONKitVS NSJSONSerialization.