- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
来自 Java 背景,我猜这是意料之中的。我真的很想学习 Objective-C 并开始开发 Mac 应用程序,但语法让我受不了。
例如:
-(void) setNumerator: (int) n
{
numerator = n;
}
破折号代表什么,为什么后面的圆括号中是 void?我从未在 C/C++、Java 或 C# 中看到括号中有 void。为什么我们在(int) n 后没有分号?但我们这里确实有:
-(void) setNumerator: (int) n;
这个分配、初始化、发布过程是怎么回事?
myFraction = [Fraction alloc];
myFraction = [myFraction init];
[myFraction release];
为什么是 [myFraction release];
而不是 myFraction = [myFraction release];
?
最后,@ 符号是什么?这个实现在 Java 中的等价物是什么?
@implementation Fraction
@end
我正在阅读 Programming in Objective C 2.0对于具有 Java 背景的人来说,学习这种新语法真是令人沮丧。
更新 1:在阅读了所有这些答案并进一步阅读了 Objective C 2.0 中的编程之后,现在一切都开始变得有意义了!
更新 2:感谢“支持多语言”的重要提示。我们可以像这样将这两个语句合并为一个:
myFraction = [Fraction alloc];
myFraction = [myFraction init];
可以简化为:
myFraction = [[Fraction alloc] init];
最佳答案
What is that dash for and why is followed by void in parenthesis?
破折号 -
表示“实例级别”(这是 Java 中的默认设置)。当您看到加号 +
时,表示类级别(与在 Java 中使用 static
相同)
括号中的 void 是返回类型,见下文。
Why don't we have a semicolon after (int) n? But we do have it here:
-(void) setNumerator: (int) n;
因为这是方法签名,所以您可以将其视为接口(interface):
interface YourClass {
void setNumerator(int n );// see? semicolon
}
同样的情况。
以 C 为根的 Objective-C(实际上这是带有对象的真正 C)需要一个头文件(在 Java 中完全删除),您可以在其中定义您的类将具有的函数/方法。
如果这样的东西存在于 java 中,则等效于:
// YourClass.java.h
interface YourClass {
void setNumerator(int n );
}
// YourClass.java.m
class YourClass {
void setNumerator( int n ) {
this.n = n;
}
}
And what's with this alloc, init, release process?
myFraction = [Fraction alloc];
myFraction = [myFraction init];
[myFraction release];
allo-init 相当于 Java 中的 new
,alloc
就是当你为你的对象申请内存时,alloc
申请内存,并且 init
调用 init
方法,相当于 Java 类构造函数(顺便说一下,Ruby 执行 same behind scenes)
在 Java 中没有等同于释放的东西,因为它是垃圾收集器,在 Objective-C 中你必须释放你的对象。
顺便说一句,初始化也可以是 myFraction = [[Fraction alloc]init];
And lastly what's with the @ signs and what's this implementation equivalent in Java?
@implementation Fraction
@end
这就是我之前提到的类定义。
I am currently reading Programming in Objective C 2.0 and it's just so frustrating learning this new syntax for someone in Java background.
这是一个相关的答案,可以帮助您更加熟悉方括号:
关于objective-c - 想学Objective-C 但是语法很乱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3010979/
我正在对一款流行游戏 (Minecraft) 进行一些修改,我在地形生成中看到了这些线条, double d4 = 1.0D; d4 *= d4; d4 *= d4; d4 = 1.0D - d4;
如何在没有浮点单元的处理器上执行 float 学运算?例如低端 8 位微 Controller 。 最佳答案 看看这篇文章:http://www.edwardrosten.com/code/fp_te
抱歉这个冗长的标题。我的代码针对没有浮点单元的微 Controller (msp430),但这应该适用于任何类似的 MCU。 如果我将一个大的运行时变量与通常被认为是浮点十进制数 (1.8) 相乘,M
我偶尔会在这个方法中遇到 stackoverflow 异常。 double norm_cdf(const double x) { double k = 1.0/(1.0 + 0.2316419
这是一个让我在过去几个小时里完全困惑的问题...... 我的程序中有一个硬编码的方程式: double s2; s2 = -(0*13)/84+6/42-0/84+24/12+(6*13)/42; 每
我知道 float 学充其量是丑陋的,但我想知道是否有人可以解释以下怪癖。在我测试的大多数编程语言中,将 0.4 添加到 0.2 会产生轻微错误,而 0.4 + 0.1 + 0.1 则不会。 两者计算
随着数据量持续增长,对合格数据专业人员的需求也会增长。具体而言,对SQL流利的专业人士的需求日益增长,而不仅仅是在初级层面。 因此,Stratascratch的创始人Nathan Rosidi以及我觉
当使用 c++ 或 -O0 编译时,以下 -O1 程序给出了数值不同的结果。 #include #include #include #include int main() { std::a
我正在尝试使用 SVG 在 map 上绘制飞行路径。我在 Leaflet 之上使用 d3,但所使用的框架不会对我的问题产生影响 - 这是三 Angular 关系。 http://fiddle.jshe
使用 IEEE754 float (在 JavaScript 中)时,与数学相关的精度损失风险是什么? 10*.1 即整数乘以有理数。 最佳答案 注意:该问题经过编辑,在发布此答案后很长时间添加了“t
我需要为网站 UI 做一些基本的 float 学运算(金钱的加法和乘法)。我知道 Javascript float 由于存储方式的原因并不准确,但我也知道以某种方式,可以获得我所需的准确度。我知道这一
我有一些像下面这样的宏: #define THING_LENGTH (512) #define MAX_COUNT (4096*8) #define MAX_LENGTH ((int32)((floa
我认为这是一个非常基本的问题 - 我正在执行此功能: private double convertMetersToFeet(double meters) { //function converts
我想在不损失太多精度的情况下替换这些函数中的 float 学,因为我没有 FPU。这可能吗?我认为逗号后的 3 个数字就足够了。 inline float smaller_f(float value,
我需要一个类来表示 double vector (在数学意义上)。 我需要的特殊功能: 任意维度 vector (我通常使用 10 - 100,000 维度) 高性能(用于受 CPU 限制的数字代码)
此社区 Wiki 问题的公认答案:What are best practices that you use when writing Objective-C and Cocoa?说 iPhone 不能
This question already has an answer here: Trouble with float on C [duplicate]
以下代码有问题: private const int movementMultiplier = 2; void Test() { XmlNode xnXCoordinate = xd.Sele
大家早上好 我在 float 学方面遇到了一些问题,完全迷失在“.to_f”、“*100”和“.0”中! 我希望有人能帮助我解决我的具体问题,并准确解释他们的解决方案为何有效,以便我下次理解这一点。
我的嵌入式 C 代码在具有单精度 FPU 的 Cortex M4F 上运行。我担心编译器多久将基于软件的 double 学放在诸如 ** float_var1 = 3.0 * int_var / fl
我是一名优秀的程序员,十分优秀!