-
-
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
%Csince it's unichar, or am I wrong?