Hoàn toàn trung thực, không có phương thức nào như phương pháp C. C có chức năng.Để minh họa sự khác biệt, nhìn vào các ví dụ sau:
Đây là một chương trình làm việc C định nghĩa một kiểu và hai chức năng mà đi cùng với nó:
#include <stdio.h>
typedef struct foo_t {
int age;
char *name;
} Foo;
void multiply_age_by_factor(int factor, Foo *f) {
f->age = f->age * factor;
}
void print_foo_description(Foo f) {
printf("age: %i, name: %s\n", f.age, f.name);
}
int main() {
Foo jon;
jon.age = 17;
jon.name = "Jon Sterling";
print_foo_description(jon);
multiply_age_by_factor(2, &jon);
print_foo_description(jon);
return 0;
}
Đây là một thực hiện Objective-C đó chương trình:
#import <Foundation/Foundation.h>
@interface Foo : NSObject {
NSUInteger age;
NSString *name;
}
@property (nonatomic, readwrite) NSUInteger age;
@property (nonatomic, copy) NSString *name;
- (void)multiplyAgeByFactor:(NSUInteger)factor;
- (NSString *)description;
- (void)logDescription;
@end
@implementation Foo
@synthesize age;
@synthesize name;
- (void)multiplyAgeByFactor:(NSUInteger)factor {
[self setAge:([self age] * factor)];
}
- (NSString *)description {
return [NSString stringWithFormat:@"age: %i, name: %@\n", [self age], [self name]];
}
- (void)logDescription {
NSLog(@"%@",[self description]);
}
@end
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Foo *jon = [[[Foo alloc] init] autorelease];
[jon setAge:17];
[jon setName:@"Jon Sterling"];
[jon logDescription];
[jon multiplyAgeByFactor:2];
[jon logDescription];
[pool drain];
return 0;
}
Đầu ra của chương trình C tinh khiết là:
age: 17, name: Jon Sterling
age: 34, name: Jon Sterling
Đầu ra của chương trình Objective-C là:
2009-08-25 17:40:52.818 test[8963:613] age: 17, name: Jon Sterling
2009-08-25 17:40:52.828 test[8963:613] age: 34, name: Jon Sterling
Sự khác biệt duy nhất là tất cả các rác mà NSLog đặt trước văn bản. Các chức năng là chính xác như nhau. Vì vậy, trong C, bạn có thể sử dụng một cái gì đó loại giống như phương pháp, nhưng họ thực sự chỉ là chức năng bao gồm một con trỏ đến một cấu trúc.
Tôi không nghĩ rằng điều này đã trả lời câu hỏi ban đầu của bạn, nhưng nó đã làm sáng tỏ một số vấn đề về thuật ngữ mà bạn dường như đang gặp phải.
Hoàn hảo, cảm ơn bạn !!! –
Không nên "[tự objcMethod];" là "[param objcMethod];" –
@Peter: Tất nhiên! Đã sửa! :) –