如果我有一个名为
的班级@interface myClass : NSObject {
int firstnum;
int secondnum;
}
//an a method that looks like this
-(myClass *) myMethod (myClass *) f;
@end
该方法返回的是什么?我常常看到像(int)myMethod这样的东西知道它返回一个整数。但是当它返回一个诸如类名称之类的对象时,它可能会返回什么?如果你想生病写出我正在工作/学习的整个项目。 (有些方法被截断以保持问题简单。但如果你想要发帖,请告诉我.thnx
#import <Foundation/Foundation.h>
@interface Fraction : NSObject {
int numerator;
int denominator;
}
@property int numerator, denominator;
-(Fraction *) add: (Fraction *) f;
@end
#import "Fraction.h"
@implementation Fraction
@synthesize numerator, denominator;
-(Fraction *) add: (Fraction *) f
{
Fraction *result = [[Fraction alloc] init];
// To add two fractions:
// a/b + c/d = ((a*d) + (b*c)) / (b * d)
result.numerator = numerator * f.denominator + denominator * f.numerator;
result.denominator = denominator * f.denominator;
[result reduce];
return result;
}
@end
答案 0 :(得分:1)
该方法返回它声称的内容:指向myClass
实例的指针。对于add:
方法,它会返回您创建的指针result
。
顺便说一句,除非您启用了垃圾收集,否则您应该在返回之前将[result autorelease]
添加到该方法;否则你的结果分数将永远存在,你会泄漏记忆。
CocoaDevCentral's Objective-C Tutorial将有助于内存管理,也可以让您更方便地返回返回指针对象的方法。
答案 1 :(得分:1)
问题可能是:什么是对象?一个对象是为了保存一堆值而留出的一些内存,它与一些与这些值交互的方法相关联。你很少想复制那整块内存。相反,您将指针传递到内存位置。因此,当您传入或返回一个对象时,您实际上只是传递指向该对象在内存中的位置的指针。指针基本上只是整数值,所以这就是返回的内容。
在大多数语言中,您甚至不必考虑这一点,事实上您很少需要在Objective-C中进行此操作。请记住,MyClass*
是类'MyClass'的对象类型,它们响应在该类上声明的所有消息。
答案 2 :(得分:1)
看起来你正在编写一本 Programming in Objective-C 一书。在我的副本中,第13章末尾(基础C语言特性)中有一节称为“如何工作”。我认为你正在寻找“事实#2:一个对象变量真的是一个指针”。在您的情况下, add 方法返回一个指向Fraction类实例的指针。 (星号,*,表示指针,类名称之前它指的是它指向的东西)如果你不介意跳过,那么本章前面有更多关于指针的内容。
答案 3 :(得分:0)
我会挑剔并尝试重写一下
#import <Foundation/Foundation.h>
@interface Fraction : NSObject {
// You should really use the recommended type instead of int
NSInteger numerator;
NSInteger denominator;
}
// Don't try and keep these on one line.
// Also, don't depend on default values for assign, retain, or copy when declaring
@property (assign, nonatomic) numerator;
@property (assign, nonatomic) denominator;
// declare the add: function which takes a pointer to a Fraction as a parameter
// and returns a pointer to the restulting fraction
- (Fraction *)add:(Fraction *)aFraction;
@end
#import "Fraction.h"
@implementation Fraction
// Again, don't try and keep these on one line.
// It's easier to visually note the number of synthesised properties matches
// the number of declared properties.
@synthesize numerator;
@synthesize denominator;
// Assume that there is an init function.
- (Fraction *)add:(Fraction *)aFraction
{
Fraction *result = [[Fraction alloc] init];
// To add two fractions:
// a/b + c/d = ((a*d) + (b*c)) / (b * d)
result.numerator = self.numerator * aFraction.denominator
+ denominator * aFraction.numerator;
result.denominator = self.denominator * aFraction.denominator;
[result reduce]; // I assume this is implemented.
return result; // Assuming garbage collection, otherwise use
// return [result autorelease];
}
@end