- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
+ (void) playMovieWithResourceFile: (NSString *) file
{
const char *source = [ file cStringUsingEncoding: [NSString defaultCStringEncoding] ];
size_t length = strlen( source );
char *str = malloc( sizeof( char) * (length + 1) );
memcpy( str, source, sizeof (char) * (length + 1) );
char *type = strstr( str, ".");
*type = 0;
type++; //< now we have extension in type, and name in str cStrings
NSAutoreleasePool *pool = [NSAutoreleasePool new];
NSString *sName, *sType;
sName = [ NSString stringWithUTF8String: str ];
sType = [ NSString stringWithUTF8String: type];
[self playMovieWithName: sName Type: sType];
// free str, but do not free type - it is a part of str
free( str );
[pool release];
}
Автор пишет так, как будто в NSString нет какого-нибудь substring'а. Я вот objective C совершенно не знаю, но предполагаю, что он там есть. А в лучшем случае там где-то в модулях есть и разбиение пути на папку, имя файла и расширение...
> free str, but do not free type - it is a part of str
Какой дельный комментарий, я бы никогда не догадался об этом из строки 9, и освободил type...
Разбиение строки на две путем выкалывания байта. Чем не байтоёбство?
Тупой как валенок код с двумя сабстрингами в данном случае был бы и проще, и понятней и эффективней.
Каждому алгоритму есть своё место.