Aby być całkowicie prawdziwym, nie ma czegoś takiego jak metoda C. C ma funkcje.Aby zilustrować różnicę, spojrzeć na poniższych przykładach:
Jest to program pracy C, która określa rodzaj i dwie funkcje, które go wraz z nim:
#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;
}
Oto implementacja Objective-C, które Program:
#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;
}
Wydajność czystego programu C:
age: 17, name: Jon Sterling
age: 34, name: Jon Sterling
Wyjście z programu Objective-C:
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
Jedyną różnicą jest to, że wszystkie śmieci NSLog stawia przed tekstem. Funkcjonalność jest dokładnie taka sama. Tak więc, w C, możesz użyć czegoś w rodzaju podobnych metod, ale są one po prostu funkcjami, które zawierają wskaźnik do struktury.
Nie sądzę, żeby to odpowiadało na twoje pierwotne pytanie, ale wyjaśniło pewne problemy z terminologią, które wydają się mieć.
Idealnie, dziękuję !!! –
Nie powinien "[samo objcMethod];" być "[param objcMethod];" –
@Peter: Oczywiście! Naprawiony! :) –