-
-
Save mdippery/816594 to your computer and use it in GitHub Desktop.
/* | |
* Copyright (C) 2011 Michael Dippery <[email protected]> | |
* | |
* Permission is hereby granted, free of charge, to any person obtaining a copy | |
* of this software and associated documentation files (the "Software"), to deal | |
* in the Software without restriction, including without limitation the rights | |
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
* copies of the Software, and to permit persons to whom the Software is | |
* furnished to do so, subject to the following conditions: | |
* | |
* The above copyright notice and this permission notice shall be included in | |
* all copies or substantial portions of the Software. | |
* | |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |
* THE SOFTWARE. | |
*/ | |
#import <Foundation/Foundation.h> | |
@interface NSString (Randomized) | |
+ (NSString *)defaultAlphabet; | |
+ (id)randomizedString; | |
+ (id)randomizedStringWithAlphabet:(NSString *)alphabet; | |
+ (id)randomizedStringWithAlphabet:(NSString *)alphabet length:(NSUInteger)len; | |
- (id)initWithDefaultAlphabet; | |
- (id)initWithAlphabet:(NSString *)alphabet; | |
- (id)initWithAlphabet:(NSString *)alphabet length:(NSUInteger)len; | |
@end |
/* | |
* Copyright (C) 2011 Michael Dippery <[email protected]> | |
* | |
* Permission is hereby granted, free of charge, to any person obtaining a copy | |
* of this software and associated documentation files (the "Software"), to deal | |
* in the Software without restriction, including without limitation the rights | |
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
* copies of the Software, and to permit persons to whom the Software is | |
* furnished to do so, subject to the following conditions: | |
* | |
* The above copyright notice and this permission notice shall be included in | |
* all copies or substantial portions of the Software. | |
* | |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |
* THE SOFTWARE. | |
*/ | |
#import "NSString+Random.h" | |
#include <stdlib.h> | |
#define DEFAULT_LENGTH 8 | |
@implementation NSString (Randomized) | |
+ (NSString *)defaultAlphabet | |
{ | |
return @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXZY0123456789"; | |
} | |
+ (id)randomizedString | |
{ | |
return [self randomizedStringWithAlphabet:[self defaultAlphabet]]; | |
} | |
+ (id)randomizedStringWithAlphabet:(NSString *)alphabet | |
{ | |
return [self randomizedStringWithAlphabet:alphabet length:DEFAULT_LENGTH]; | |
} | |
+ (id)randomizedStringWithAlphabet:(NSString *)alphabet length:(NSUInteger)len | |
{ | |
return [[[self alloc] initWithAlphabet:alphabet length:len] autorelease]; | |
} | |
- (id)initWithDefaultAlphabet | |
{ | |
return [self initWithAlphabet:[NSString defaultAlphabet]]; | |
} | |
- (id)initWithAlphabet:(NSString *)alphabet | |
{ | |
return [self initWithAlphabet:alphabet length:DEFAULT_LENGTH]; | |
} | |
- (id)initWithAlphabet:(NSString *)alphabet length:(NSUInteger)len | |
{ | |
[self release]; | |
NSMutableString *s = [NSMutableString stringWithCapacity:len]; | |
for (NSUInteger i = 0U; i < len; i++) { | |
u_int32_t r = arc4random() % [alphabet length]; | |
unichar c = [alphabet characterAtIndex:r]; | |
[s appendFormat:@"%C", c]; | |
} | |
return [NSString stringWithString:s]; | |
} | |
@end |
/* | |
* Copyright (C) 2011 Michael Dippery <[email protected]> | |
* | |
* Permission is hereby granted, free of charge, to any person obtaining a copy | |
* of this software and associated documentation files (the "Software"), to deal | |
* in the Software without restriction, including without limitation the rights | |
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
* copies of the Software, and to permit persons to whom the Software is | |
* furnished to do so, subject to the following conditions: | |
* | |
* The above copyright notice and this permission notice shall be included in | |
* all copies or substantial portions of the Software. | |
* | |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |
* THE SOFTWARE. | |
*/ | |
#import <Foundation/Foundation.h> | |
@interface NSString (Randomized) | |
+ (NSString *)defaultAlphabet; | |
+ (id)randomizedString; | |
+ (id)randomizedStringWithAlphabet:(NSString *)alphabet; | |
+ (id)randomizedStringWithAlphabet:(NSString *)alphabet length:(NSUInteger)len; | |
- (id)initWithDefaultAlphabet; | |
- (id)initWithAlphabet:(NSString *)alphabet; | |
- (id)initWithAlphabet:(NSString *)alphabet length:(NSUInteger)len; | |
@end |
/* | |
* Copyright (C) 2011 Michael Dippery <[email protected]> | |
* | |
* Permission is hereby granted, free of charge, to any person obtaining a copy | |
* of this software and associated documentation files (the "Software"), to deal | |
* in the Software without restriction, including without limitation the rights | |
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
* copies of the Software, and to permit persons to whom the Software is | |
* furnished to do so, subject to the following conditions: | |
* | |
* The above copyright notice and this permission notice shall be included in | |
* all copies or substantial portions of the Software. | |
* | |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |
* THE SOFTWARE. | |
*/ | |
#import "NSString+Random.h" | |
#include <stdlib.h> | |
#define DEFAULT_LENGTH 8 | |
@implementation NSString (Randomized) | |
+ (NSString *)defaultAlphabet | |
{ | |
return @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXZY0123456789"; | |
} | |
+ (id)randomizedString | |
{ | |
return [self randomizedStringWithAlphabet:[self defaultAlphabet]]; | |
} | |
+ (id)randomizedStringWithAlphabet:(NSString *)alphabet | |
{ | |
return [self randomizedStringWithAlphabet:alphabet length:DEFAULT_LENGTH]; | |
} | |
+ (id)randomizedStringWithAlphabet:(NSString *)alphabet length:(NSUInteger)len | |
{ | |
return [[[self alloc] initWithAlphabet:alphabet length:len] autorelease]; | |
} | |
- (id)initWithDefaultAlphabet | |
{ | |
return [self initWithAlphabet:[NSString defaultAlphabet]]; | |
} | |
- (id)initWithAlphabet:(NSString *)alphabet | |
{ | |
return [self initWithAlphabet:alphabet length:DEFAULT_LENGTH]; | |
} | |
- (id)initWithAlphabet:(NSString *)alphabet length:(NSUInteger)len | |
{ | |
[self release]; | |
NSMutableString *s = [NSMutableString stringWithCapacity:len]; | |
for (NSUInteger i = 0U; i < len; i++) { | |
u_int32_t r = arc4random() % [alphabet length]; | |
unichar c = [alphabet characterAtIndex:r]; | |
[s appendFormat:@"%C", c]; | |
} | |
return [s copy]; | |
} | |
@end |
Yeah, that is better.
Line 47, I would put an autorelease there. or rename the class methods to "newRandomizedString....".
but I would definitely autorelease... :)
And why did you provide two .m files?
Yeah, I forgot the autorelease.
Re: the two .m
files, I think that's due to a bug with gist (the "extra" one can't be deleted, and I didn't add it explicitly).
Correction: it can't be deleted through the web interface. ;)
Nice... :)
now how bout the .h file?
I can include it. I didn't before since this was just an example.
Thanks mate! :)
Yeah. I had used it in a project, and copy/pasted it from the project to gist to send to someone (probably on a forum or something).
fair enough... :)
now it's a complete drop in category... just like it should be... :)
You've got a memory management problem.
Replace the last method with this:
- (id)initWithAlphabet:(NSString *)alphabet length:(NSUInteger)len- (id)initWithAlphabet:(NSString *)alphabet length:(NSUInteger)len
{
NSMutableString *s = [[NSMutableString alloc] initWithCapacity:len];
for (NSUInteger i = 0U; i < len; i++) {
u_int32_t r = arc4random() % [alphabet length];
unichar c = [alphabet characterAtIndex:r];
[s appendFormat:@"%C", c];
}
return s;
}
By the way, there's no need to create an NSString at the end; just return the NSMutableString, since it's a subclass.
Whoops, thanks for the catch.
As for creating an NSString at the end, I prefer to return immutable objects unless a mutable one is necessary, but an NSMutableString would work, too.
Line 67, might be better as
%C
since it's unichar, or am I wrong?