adium 4790:f8f09244f5f3: Add some more fast enumeration.

commits at adium.im commits at adium.im
Sun Apr 29 19:23:54 UTC 2012


details:	http://hg.adium.im/adium/rev/f8f09244f5f3
revision:	4790:f8f09244f5f3
branch:		(none)
author:		Frank Dowsett <wixardy at adium.im>
date:		Sun Apr 29 15:09:07 2012 -0400

Add some more fast enumeration.

diffs (truncated from 1542 to 1000 lines):

diff -r 3f1e5d253f08 -r f8f09244f5f3 Frameworks/AIUtilities Framework/Source/AIAlternatingRowOutlineView.m
--- a/Frameworks/AIUtilities Framework/Source/AIAlternatingRowOutlineView.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Frameworks/AIUtilities Framework/Source/AIAlternatingRowOutlineView.m	Sun Apr 29 15:09:07 2012 -0400
@@ -236,16 +236,13 @@
 
 - (void)_drawGridInClipRect:(NSRect)rect
 {
-    NSEnumerator	*enumerator;
-    NSTableColumn	*column;
     CGFloat		xPos = 0.5f;
     CGFloat			intercellWidth = [self intercellSpacing].width;
     
     [[self gridColor] set];
     [NSBezierPath setDefaultLineWidth:1.0f];
 
-    enumerator = [[self tableColumns] objectEnumerator];
-    while ((column = [enumerator nextObject])) {
+    for (NSTableColumn *column in self.tableColumns) {
         xPos += [column width] + intercellWidth;
 
         [NSBezierPath strokeLineFromPoint:NSMakePoint(xPos, rect.origin.y)
diff -r 3f1e5d253f08 -r f8f09244f5f3 Frameworks/AIUtilities Framework/Source/AIAttributedStringAdditions.m
--- a/Frameworks/AIUtilities Framework/Source/AIAttributedStringAdditions.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Frameworks/AIUtilities Framework/Source/AIAttributedStringAdditions.m	Sun Apr 29 15:09:07 2012 -0400
@@ -370,9 +370,7 @@
 
 	BOOL hasLineThrough = NO, hasUnderline = NO;
 
-	NSEnumerator *keysEnum = [attrs keyEnumerator];
-	NSString *key;
-	while ((key = [keysEnum nextObject])) {
+	for (NSString *key in attrs) {
 		if ([key isEqualToString:NSUnderlineStyleAttributeName]) {
 			hasUnderline = YES;
 		} else if ([key isEqualToString:NSStrikethroughStyleAttributeName]) {
diff -r 3f1e5d253f08 -r f8f09244f5f3 Frameworks/AIUtilities Framework/Source/AIBundleAdditions.m
--- a/Frameworks/AIUtilities Framework/Source/AIBundleAdditions.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Frameworks/AIUtilities Framework/Source/AIBundleAdditions.m	Sun Apr 29 15:09:07 2012 -0400
@@ -41,18 +41,15 @@
 {
 	NSMutableSet	*supportedDocumentTypes = [NSMutableSet set];
 	NSDictionary	*documentTypes = [[self infoDictionary] objectForKey:@"CFBundleDocumentTypes"];
-	NSEnumerator	*documentTypesEnumerator;
-	NSDictionary	*documentType;
 
 	//Look at each dictionary in turn
-	documentTypesEnumerator = [documentTypes objectEnumerator];
-	while ((documentType = [documentTypesEnumerator nextObject])) {
+	[documentTypes enumerateKeysAndObjectsUsingBlock:^(id key, id documentType, BOOL *stop) {
 		//The @"CFBundleTypeExtensions" key yields an NSArray of supported extensions
 		NSArray	*extensions = [documentType objectForKey:@"CFBundleTypeExtensions"];
 		if (extensions) {
 			[supportedDocumentTypes addObjectsFromArray:extensions];
 		}
-	}
+	}];
 
 	return supportedDocumentTypes;
 }
diff -r 3f1e5d253f08 -r f8f09244f5f3 Frameworks/AIUtilities Framework/Source/AICompletingTextField.m
--- a/Frameworks/AIUtilities Framework/Source/AICompletingTextField.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Frameworks/AIUtilities Framework/Source/AICompletingTextField.m	Sun Apr 29 15:09:07 2012 -0400
@@ -171,16 +171,14 @@
     // to a completion value, but with different case, he or she can avoid this automatic case "correction" by
     // NOT hitting tab or enter, and instead just clicking the appropriate button or control they want to use.
     
-    NSEnumerator    *enumerator;
-    NSString        *userValue, *currentString;
+    NSString        *userValue;
     
     // If the field matches an entry in stringSet (except maybe case) replace it with the correct-case string
     userValue = [self stringValue];
     
     if ([userValue length] >= minLength) {
         // Look for matching first matching string (except for case)
-        enumerator = [stringSet objectEnumerator];
-        while ((currentString = [enumerator nextObject])) {
+        for (NSString *currentString in stringSet) {
             if ([currentString compare:userValue options:NSCaseInsensitiveSearch] == 0) {
                 [self setStringValue:currentString];
                 break;
@@ -195,9 +193,7 @@
 - (NSString *)completionForString:(NSString *)inString
 {
 	NSMutableArray  *possibleCompletions = [[NSMutableArray alloc] init];
-    NSEnumerator	*enumerator;
 	NSString		*compString = inString;
-    NSString		*autoString;
     NSUInteger		length;
     NSRange			range;
 
@@ -213,8 +209,7 @@
 	
     if (length >= minLength) {
         //Check each auto-complete string for a match, add each match to array of possible competions
-        enumerator = [stringSet objectEnumerator];
-        while ((autoString = [enumerator nextObject])) {
+        for (NSString *autoString in stringSet) {
             if (([autoString length] > length) && [autoString compare:compString options:NSCaseInsensitiveSearch range:range] == 0) {
 				[possibleCompletions addObject:autoString];
             }
diff -r 3f1e5d253f08 -r f8f09244f5f3 Frameworks/AIUtilities Framework/Source/AIFontManagerAdditions.m
--- a/Frameworks/AIUtilities Framework/Source/AIFontManagerAdditions.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Frameworks/AIUtilities Framework/Source/AIFontManagerAdditions.m	Sun Apr 29 15:09:07 2012 -0400
@@ -34,11 +34,7 @@
 	}
 
 	if (!theFont) {
-		NSEnumerator	*fontEnum;
-		NSString		*thisName;
-
-		fontEnum = [[fontManager availableFontFamilies] objectEnumerator];
-		while ((thisName = [fontEnum nextObject])) {
+		for (NSString *thisName in [fontManager availableFontFamilies]) {
 			if ([thisName caseInsensitiveCompare:name] == NSOrderedSame) {
 				@try
 				{
diff -r 3f1e5d253f08 -r f8f09244f5f3 Frameworks/AIUtilities Framework/Source/AIGenericViewCell.m
--- a/Frameworks/AIUtilities Framework/Source/AIGenericViewCell.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Frameworks/AIUtilities Framework/Source/AIGenericViewCell.m	Sun Apr 29 15:09:07 2012 -0400
@@ -81,10 +81,7 @@
 	[embeddedView drawRect:usableFrame];
 	
 	//Now draw each subview in its proper place
-	NSEnumerator	*enumerator = [[embeddedView subviews] objectEnumerator];
-	NSView			*subView;
-
-	while ((subView = [enumerator nextObject])) {
+	for (NSView *subView in [embeddedView subviews]) {
 		NSRect	subFrame = [subView frame];
 		NSRect	subUsableFrame = NSMakeRect(0, 0, subFrame.size.width, subFrame.size.height);
 
diff -r 3f1e5d253f08 -r f8f09244f5f3 Frameworks/AIUtilities Framework/Source/AIHostReachabilityMonitor.m
--- a/Frameworks/AIUtilities Framework/Source/AIHostReachabilityMonitor.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Frameworks/AIUtilities Framework/Source/AIHostReachabilityMonitor.m	Sun Apr 29 15:09:07 2012 -0400
@@ -553,12 +553,8 @@
 - (void)queryUnconfiguredHosts
 {
 	if ([unconfiguredHostsAndObservers count]) {
-		NSEnumerator	*enumerator;
-		NSDictionary	*unconfiguredDict;
-
 		[hostAndObserverListLock lock];
-		enumerator = [unconfiguredHostsAndObservers objectEnumerator];
-		while ((unconfiguredDict = [enumerator nextObject])) {
+		for (NSDictionary *unconfiguredDict in unconfiguredHostsAndObservers) {
 			[self scheduleReachabilityMonitoringForHost:[unconfiguredDict objectForKey:@"host"]
 											   observer:[unconfiguredDict objectForKey:@"observer"]];
 		}
@@ -642,14 +638,11 @@
 	NSArray	*oldHosts = [hosts copy];
 	NSArray	*oldObservers = [observers copy];
 	
-	NSEnumerator				*enumerator;
-	SCNetworkReachabilityRef	reachabilityRef;
-	enumerator = [reachabilities objectEnumerator];
-	while ((reachabilityRef = (SCNetworkReachabilityRef)[enumerator nextObject])) {
-		SCNetworkReachabilityUnscheduleFromRunLoop(reachabilityRef,
+	[reachabilities enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
+		SCNetworkReachabilityUnscheduleFromRunLoop((SCNetworkReachabilityRef)obj,
 												   CFRunLoopGetCurrent(),
 												   kCFRunLoopDefaultMode);
-	}
+	}];
 	
 	[hosts removeAllObjects];
 	[observers removeAllObjects];
diff -r 3f1e5d253f08 -r f8f09244f5f3 Frameworks/AIUtilities Framework/Source/AILinkTextView.m
--- a/Frameworks/AIUtilities Framework/Source/AILinkTextView.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Frameworks/AIUtilities Framework/Source/AILinkTextView.m	Sun Apr 29 15:09:07 2012 -0400
@@ -118,15 +118,12 @@
 	linkMenuItems = [linkTrackingController menuItemsForEvent:theEvent withOffset:NSMakePoint(0,0)];
 	
 	if ([linkMenuItems count]) {
-		NSMenuItem		*menuItem;
-		NSEnumerator	*enumerator;
-
 		if (!menu) menu = [[[NSMenu alloc] init] autorelease];
 		
-		enumerator = [linkMenuItems reverseObjectEnumerator];
-		while ((menuItem = [enumerator nextObject])) {
+		[linkMenuItems enumerateObjectsWithOptions:NSEnumerationReverse
+										usingBlock:^(id menuItem, NSUInteger idx, BOOL *stop) {
 			[menu insertItem:menuItem atIndex:0];
-		}
+		}];
 	}
 	
 	return menu;
diff -r 3f1e5d253f08 -r f8f09244f5f3 Frameworks/AIUtilities Framework/Source/AILinkTrackingController.m
--- a/Frameworks/AIUtilities Framework/Source/AILinkTrackingController.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Frameworks/AIUtilities Framework/Source/AILinkTrackingController.m	Sun Apr 29 15:09:07 2012 -0400
@@ -317,12 +317,8 @@
 //Stops cursor tracking, removing all cursor rects
 - (void)_endCursorTracking
 {
-    NSEnumerator	*enumerator;
-    AIFlexibleLink	*trackedLink;
-
     //Remove all existing tracking rects
-    enumerator = [linkArray objectEnumerator];
-    while ((trackedLink = [enumerator nextObject])) {
+    for (AIFlexibleLink *trackedLink in linkArray) {
         [controlView removeTrackingRect:[trackedLink trackingTag]];
     }
 
diff -r 3f1e5d253f08 -r f8f09244f5f3 Frameworks/AIUtilities Framework/Source/AIMenuAdditions.m
--- a/Frameworks/AIUtilities Framework/Source/AIMenuAdditions.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Frameworks/AIUtilities Framework/Source/AIMenuAdditions.m	Sun Apr 29 15:09:07 2012 -0400
@@ -137,9 +137,7 @@
 
 - (void)setAllMenuItemsToState:(int)state
 {
-	NSEnumerator	*enumerator = [[self itemArray] objectEnumerator];
-	NSMenuItem		*menuItem;
-	while ((menuItem = [enumerator nextObject])) {
+	for (NSMenuItem *menuItem in self.itemArray) {
 		[menuItem setState:state];
 	}
 }
@@ -147,10 +145,7 @@
 //Finds and returns the first enabled menu item, or nil if there are none
 - (NSMenuItem *)firstEnabledMenuItem
 {
-	NSEnumerator	*enumerator = [[self itemArray] objectEnumerator];
-	NSMenuItem		*menuItem;
-	
-	while ((menuItem = [enumerator nextObject])) {
+	for (NSMenuItem *menuItem in self.itemArray) {
 		if ([menuItem isEnabled]) return menuItem;
 	}
 	
diff -r 3f1e5d253f08 -r f8f09244f5f3 Frameworks/AIUtilities Framework/Source/AIOutlineView.m
--- a/Frameworks/AIUtilities Framework/Source/AIOutlineView.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Frameworks/AIUtilities Framework/Source/AIOutlineView.m	Sun Apr 29 15:09:07 2012 -0400
@@ -113,13 +113,11 @@
 			}
 
         } else if (pressedChar == NSRightArrowFunctionKey) { //right
-			NSEnumerator *enumerator = [[self arrayOfSelectedItems] objectEnumerator];
-			id object;
-			while ((object = [enumerator nextObject])) {
+			[self.arrayOfSelectedItems enumerateObjectsUsingBlock:^(id object, NSUInteger idx, BOOL *stop) {
 				if ([self isExpandable:object] && ![self isItemExpanded:object]) {
 					[self expandItem:object];
 				}
-			}
+			}];
 
 		} else if (pressedChar == NSUpArrowFunctionKey) { //up
 			[super keyDown:theEvent];
diff -r 3f1e5d253f08 -r f8f09244f5f3 Frameworks/AIUtilities Framework/Source/AIOutlineViewAdditions.m
--- a/Frameworks/AIUtilities Framework/Source/AIOutlineViewAdditions.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Frameworks/AIUtilities Framework/Source/AIOutlineViewAdditions.m	Sun Apr 29 15:09:07 2012 -0400
@@ -70,19 +70,15 @@
 
 - (void)selectItemsInArray:(NSArray *)selectedItems
 {
-	NSEnumerator	*enumerator = [selectedItems objectEnumerator];
-	id				selectedItem;
-	NSUInteger 			selectedRow;
-
 	id  indexSet = [NSMutableIndexSet indexSet];
 
 	//Build an index set
-	while ((selectedItem = [enumerator nextObject])) {
-		selectedRow = [self rowForItem:selectedItem];
+	[selectedItems enumerateObjectsUsingBlock:^(id selectedItem, NSUInteger idx, BOOL *stop) {
+		NSUInteger selectedRow = [self rowForItem:selectedItem];
 		if (selectedRow != NSNotFound) {
 			[indexSet addIndex:selectedRow];
 		}
-	}
+	}];
 
 	//Select the indexes
 	[self selectRowIndexes:indexSet byExtendingSelection:NO];
diff -r 3f1e5d253f08 -r f8f09244f5f3 Frameworks/AIUtilities Framework/Source/AIPopUpButtonAdditions.m
--- a/Frameworks/AIUtilities Framework/Source/AIPopUpButtonAdditions.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Frameworks/AIUtilities Framework/Source/AIPopUpButtonAdditions.m	Sun Apr 29 15:09:07 2012 -0400
@@ -38,10 +38,7 @@
 	BOOL selectedItem = NO;
 
 	if ([self numberOfItems] > 0) {
-		NSEnumerator *enumerator = [[self itemArray] objectEnumerator];
-		NSMenuItem	 *menuItem;
-		
-		while ((menuItem = [enumerator nextObject])) {
+		for (NSMenuItem *menuItem in self.itemArray) {
 			if ([[menuItem representedObject] compare:object] == NSOrderedSame) {
 				[self selectItem:menuItem];
 				selectedItem = YES;
diff -r 3f1e5d253f08 -r f8f09244f5f3 Frameworks/AIUtilities Framework/Source/AIStringAdditions.m
--- a/Frameworks/AIUtilities Framework/Source/AIStringAdditions.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Frameworks/AIUtilities Framework/Source/AIStringAdditions.m	Sun Apr 29 15:09:07 2012 -0400
@@ -702,9 +702,8 @@
 
 - (NSString *)volumePath
 {
-	NSEnumerator *pathEnum = [[[NSWorkspace sharedWorkspace] mountedLocalVolumePaths] objectEnumerator];
 	NSString *volumePath;
-	while ((volumePath = [pathEnum nextObject])) {
+	for (volumePath in [[NSWorkspace sharedWorkspace] mountedLocalVolumePaths]) {
 		if ([self hasPrefix:[volumePath stringByAppendingString:@"/"]])
 			break;
 	}
diff -r 3f1e5d253f08 -r f8f09244f5f3 Frameworks/AIUtilities Framework/Source/AITableViewAdditions.m
--- a/Frameworks/AIUtilities Framework/Source/AITableViewAdditions.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Frameworks/AIUtilities Framework/Source/AITableViewAdditions.m	Sun Apr 29 15:09:07 2012 -0400
@@ -57,9 +57,7 @@
 
 	NSMutableIndexSet *indexes = [NSMutableIndexSet indexSet];
 	
-	NSEnumerator *enumerator = [selectedItems objectEnumerator];
-	id	item;
-	while ((item = [enumerator nextObject])) {
+	for (id item in selectedItems) {
 		NSUInteger i = [sourceArray indexOfObject:item];
 		if (i != NSNotFound) {
 			[indexes addIndex:i];
diff -r 3f1e5d253f08 -r f8f09244f5f3 Frameworks/Adium Framework/Source/AIAbstractListController.m
--- a/Frameworks/Adium Framework/Source/AIAbstractListController.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Frameworks/Adium Framework/Source/AIAbstractListController.m	Sun Apr 29 15:09:07 2012 -0400
@@ -826,8 +826,7 @@
 			@"ymsgr://im?to=%@", @"Yahoo! Japan",
 			nil];
 
-		NSEnumerator *itemsEnum = [items objectEnumerator];
-		for (AIProxyListObject *proxyListObject = [itemsEnum nextObject]; proxyListObject; proxyListObject = [itemsEnum nextObject]) {
+		for (AIProxyListObject *proxyListObject in items) {
 			AIListObject *listObject = proxyListObject.listObject;
 			NSString *format;
 
diff -r 3f1e5d253f08 -r f8f09244f5f3 Frameworks/Adium Framework/Source/AIAccountMenu.m
--- a/Frameworks/Adium Framework/Source/AIAccountMenu.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Frameworks/Adium Framework/Source/AIAccountMenu.m	Sun Apr 29 15:09:07 2012 -0400
@@ -629,10 +629,7 @@
 {
 	NSMenu *submenu;
 	if ((submenu = [menuItem submenu])) {
-		NSEnumerator *enumerator = [[submenu itemArray] objectEnumerator];
-		NSMenuItem *submenuItem;
-		
-		while ((submenuItem = [enumerator nextObject])) {
+		for (NSMenuItem *submenuItem in submenu.itemArray) {
 			AIStatus	 *status;
 			NSDictionary *newRepresentedObject;
 
diff -r 3f1e5d253f08 -r f8f09244f5f3 Frameworks/Adium Framework/Source/AIColorPickerSliders.m
--- a/Frameworks/Adium Framework/Source/AIColorPickerSliders.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Frameworks/Adium Framework/Source/AIColorPickerSliders.m	Sun Apr 29 15:09:07 2012 -0400
@@ -56,12 +56,7 @@
 	method_invoke(self, class_getInstanceMethod([AIColorPickerSliders class], @selector(_setupProfileUI)));
 
 	if (sliderModePopUp && [sliderModePopUp isKindOfClass:[NSPopUpButton class]]) {
-		NSMenu			*menu = [sliderModePopUp menu];
-		NSMenuItem		*menuItem;
-		NSEnumerator	*enumerator;
-
-		enumerator = [[menu itemArray] objectEnumerator];
-		while ((menuItem = [enumerator nextObject])) {
+		for (NSMenuItem *menuItem in [sliderModePopUp menu].itemArray) {
 			//Remove the key equivalent
 			[menuItem setKeyEquivalent:@""];
 		}
diff -r 3f1e5d253f08 -r f8f09244f5f3 Frameworks/Adium Framework/Source/AIEmoticonPack.h
--- a/Frameworks/Adium Framework/Source/AIEmoticonPack.h	Fri Apr 27 01:13:46 2012 -0400
+++ b/Frameworks/Adium Framework/Source/AIEmoticonPack.h	Sun Apr 29 15:09:07 2012 -0400
@@ -21,7 +21,7 @@
 	NSString			*serviceClass;
 	NSString			*emoticonLocation;
     NSMutableArray		*emoticonArray;
-	NSMutableArray		*enabledEmoticonArray;
+	NSArray				*enabledEmoticonArray;
     BOOL				enabled;
 }
 
diff -r 3f1e5d253f08 -r f8f09244f5f3 Frameworks/Adium Framework/Source/AIEmoticonPack.m
--- a/Frameworks/Adium Framework/Source/AIEmoticonPack.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Frameworks/Adium Framework/Source/AIEmoticonPack.m	Sun Apr 29 15:09:07 2012 -0400
@@ -151,17 +151,8 @@
  */
 - (NSArray *)enabledEmoticons
 {
-	NSEnumerator	*enumerator;
-	AIEmoticon		*emo;
-	
-	if (!enabledEmoticonArray) {
-		enabledEmoticonArray = [[NSMutableArray alloc] init];
-		enumerator = [[self emoticons] objectEnumerator];
-		while ((emo = [enumerator nextObject])) {
-			if ([emo isEnabled])
-				[enabledEmoticonArray addObject:emo];
-		}
-	}
+	if (!enabledEmoticonArray)
+		enabledEmoticonArray = [self.emoticons filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"isEnabled == TRUE"]];
 	
 	return enabledEmoticonArray;
 }
@@ -197,12 +188,8 @@
  */
 - (void)setDisabledEmoticons:(NSArray *)inArray
 {
-    NSEnumerator    *enumerator;
-    AIEmoticon      *emoticon;
-    
     //Flag our emoticons as enabled/disabled
-    enumerator = [[self emoticons] objectEnumerator];
-    while ((emoticon = [enumerator nextObject])) {
+    for (AIEmoticon *emoticon in self.emoticons) {
         [emoticon setEnabled:(![inArray containsObject:[emoticon name]])];
     }
 	
@@ -350,13 +337,9 @@
  */
 - (void)loadAdiumEmoticons:(NSDictionary *)emoticons localizedStrings:(NSDictionary *)localizationDict
 {
-	NSEnumerator	*enumerator = [emoticons keyEnumerator];
-	NSString		*fileName;
-	NSBundle		*myBundle = nil;
+	__block NSBundle	*myBundle = nil;
 
-	while ((fileName = [enumerator nextObject])) {
-		id	dict = [emoticons objectForKey:fileName];
-
+	[emoticons enumerateKeysAndObjectsUsingBlock:^(id fileName, id dict, BOOL *stop) {
 		if ([dict isKindOfClass:[NSDictionary class]]) {
 			NSString *emoticonName = [(NSDictionary *)dict objectForKey:EMOTICON_NAME];
 			NSString *localizedEmoticonName = nil;
@@ -385,7 +368,7 @@
 																 name:emoticonName
 																 pack:self]];
 		}
-	}
+	}];
 }
 
 /*!
@@ -393,17 +376,12 @@
  */
 - (void)loadProteusEmoticons:(NSDictionary *)emoticons
 {
-	NSEnumerator	*enumerator = [emoticons keyEnumerator];
-	NSString		*fileName;
-	
-	while ((fileName = [enumerator nextObject])) {
-		NSDictionary	*dict = [emoticons objectForKey:fileName];
-		
+	[emoticons enumerateKeysAndObjectsUsingBlock:^(id fileName, id dict, BOOL *stop) {
 		[emoticonArray addObject:[AIEmoticon emoticonWithIconPath:[bundle pathForImageResource:fileName]
 													  equivalents:[dict objectForKey:@"String Representations"]
 															 name:[dict objectForKey:@"Meaning"]
 															 pack:self]];
-	}
+	}];
 }
 
 /*!
@@ -411,12 +389,8 @@
  */
 - (void)flushEmoticonImageCache
 {
-    NSEnumerator    *enumerator;
-    AIEmoticon      *emoticon;
-    
     //Flag our emoticons as enabled/disabled
-    enumerator = [[self emoticons] objectEnumerator];
-    while ((emoticon = [enumerator nextObject])) {
+    for (AIEmoticon *emoticon in self.emoticons) {
         [emoticon flushEmoticonImageCache];
     }
 }
diff -r 3f1e5d253f08 -r f8f09244f5f3 Frameworks/Adium Framework/Source/AIServiceIcons.m
--- a/Frameworks/Adium Framework/Source/AIServiceIcons.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Frameworks/Adium Framework/Source/AIServiceIcons.m	Sun Apr 29 15:09:07 2012 -0400
@@ -173,12 +173,10 @@
 
 	if (iconDict && [[iconDict objectForKey:@"AdiumSetVersion"] intValue] == 1) {
 		NSDictionary	*previewIconNames = [iconDict objectForKey:@"List"];
-		NSEnumerator	*enumerator = [[NSArray arrayWithObjects:@"AIM",@"Jabber",@"MSN",@"Yahoo!",nil] objectEnumerator];
-		NSString		*iconID;
 		int				xOrigin = 0;
 
 		[image lockFocus];
-		while ((iconID = [enumerator nextObject])) {
+		for (NSString *iconID in [NSArray arrayWithObjects:@"AIM",@"Jabber",@"MSN",@"Yahoo!",nil]) {
 			NSString	*anIconPath = [inPath stringByAppendingPathComponent:[previewIconNames objectForKey:iconID]];
 			NSImage		*anIcon;
 
diff -r 3f1e5d253f08 -r f8f09244f5f3 Frameworks/Adium Framework/Source/AIStatusGroup.m
--- a/Frameworks/Adium Framework/Source/AIStatusGroup.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Frameworks/Adium Framework/Source/AIStatusGroup.m	Sun Apr 29 15:09:07 2012 -0400
@@ -171,17 +171,14 @@
 - (NSMenu *)statusSubmenuNotifyingTarget:(id)target action:(SEL)selector
 {
 	NSMenu			*menu = [[NSMenu allocWithZone:[NSMenu menuZone]] init];
-	NSEnumerator	*enumerator;
 	NSMenuItem		*menuItem;
-	AIStatusItem	*statusState;
 	AIStatusType	currentStatusType = AIAvailableStatusType;
 	BOOL			addedItemForThisStatusType = NO;
 
 	/* Create a menu item for each state.  States must first be sorted such that states of the same AIStatusType
 		* are grouped together.
 		*/
-	enumerator = [[self sortedContainedStatusItems] objectEnumerator];
-	while ((statusState = [enumerator nextObject])) {
+	for (AIStatusItem *statusState in [self sortedContainedStatusItems]) {
 		AIStatusType thisStatusType = statusState.statusType;
 
 		//We treat Invisible statuses as being the same as Away for purposes of the menu
diff -r 3f1e5d253f08 -r f8f09244f5f3 Frameworks/Adium Framework/Source/AIStatusMenu.m
--- a/Frameworks/Adium Framework/Source/AIStatusMenu.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Frameworks/Adium Framework/Source/AIStatusMenu.m	Sun Apr 29 15:09:07 2012 -0400
@@ -155,9 +155,7 @@
  */
 - (void)rebuildMenu
 {
-	NSEnumerator			*enumerator;
 	NSMenuItem				*menuItem;
-	AIStatus				*statusState;
 	AIStatusType			currentStatusType = AIAvailableStatusType;
 	AIStatusMutabilityType	currentStatusMutabilityType = AILockedStatusState;
 
@@ -173,8 +171,7 @@
 	/* Create a menu item for each state.  States must first be sorted such that states of the same AIStatusType
 		* are grouped together.
 		*/
-	enumerator = [[adium.statusController sortedFullStateArray] objectEnumerator];
-	while ((statusState = [enumerator nextObject])) {
+	for (AIStatus *statusState in [adium.statusController sortedFullStateArray]) {
 		NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
 		AIStatusType thisStatusType = statusState.statusType;
 		AIStatusMutabilityType thisStatusMutabilityType = [statusState mutabilityType];
@@ -449,8 +446,6 @@
 + (NSMenu *)staticStatusStatesMenuNotifyingTarget:(id)target selector:(SEL)selector
 {
 	NSMenu			*statusStatesMenu = [[NSMenu allocWithZone:[NSMenu menuZone]] init];
-	NSEnumerator	*enumerator;
-	AIStatus		*statusState;
 	AIStatusType	currentStatusType = AIAvailableStatusType;
 	NSMenuItem		*menuItem;
 	
@@ -466,8 +461,7 @@
 	/* Create a menu item for each state.  States must first be sorted such that states of the same AIStatusType
 		* are grouped together.
 		*/
-	enumerator = [[adium.statusController sortedFullStateArray] objectEnumerator];
-	while ((statusState = [enumerator nextObject])) {
+	for (AIStatus *statusState in [adium.statusController sortedFullStateArray]) {
 		AIStatusType thisStatusType = statusState.statusType;
 
 		//We treat Invisible statuses as being the same as Away for purposes of the menu
diff -r 3f1e5d253f08 -r f8f09244f5f3 Frameworks/Adium Framework/Source/CSNewContactAlertWindowController.m
--- a/Frameworks/Adium Framework/Source/CSNewContactAlertWindowController.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Frameworks/Adium Framework/Source/CSNewContactAlertWindowController.m	Sun Apr 29 15:09:07 2012 -0400
@@ -200,13 +200,9 @@
 // Configure window for our current event dict
 - (void)configureForEvent
 {
-	NSEnumerator 	*enumerator;
-	NSMenuItem 		*menuItem;
-
 	// Select the correct event
 	NSString	*eventID = [alert objectForKey:KEY_EVENT_ID];
-	enumerator = [[popUp_event itemArray] objectEnumerator];
-	while ((menuItem = [enumerator nextObject])) {
+	for (NSMenuItem *menuItem in [popUp_event itemArray]) {
 		if ([eventID isEqualToString:[menuItem representedObject]]) {
 			[popUp_event selectItem:menuItem];
 			break;
@@ -215,8 +211,7 @@
 	
 	// Select the correct action
 	NSString *actionID = [alert objectForKey:KEY_ACTION_ID];
-	enumerator = [[popUp_action itemArray] objectEnumerator];
-	while ((menuItem = [enumerator nextObject])) {
+	for (NSMenuItem *menuItem in [popUp_action itemArray]) {
 		if ([actionID isEqualToString:[menuItem representedObject]]) {
 			[popUp_action selectItem:menuItem];
 			break;
diff -r 3f1e5d253f08 -r f8f09244f5f3 Frameworks/Adium Framework/Source/ESContactAlertsViewController.m
--- a/Frameworks/Adium Framework/Source/ESContactAlertsViewController.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Frameworks/Adium Framework/Source/ESContactAlertsViewController.m	Sun Apr 29 15:09:07 2012 -0400
@@ -375,8 +375,6 @@
 
 - (void)calculateHeightForItem:(id)item
 {
-	NSEnumerator	*enumerator;
-	NSTableColumn	*tableColumn;
 	BOOL			eventIsExtended = [self outlineView:outlineView_summary
 								extendToEdgeColumn:EVENT_COLUMN_INDEX
 											ofRow:[outlineView_summary rowForItem:item]];
@@ -386,9 +384,7 @@
 	NSRect			rectOfEventColumn = [outlineView_summary rectOfColumn:EVENT_COLUMN_INDEX];
 	CGFloat			expandedEventWidth = NSMaxX(rectOfLastColumn) - NSMinX(rectOfEventColumn);
 
-	//This pool seems to fix a crash. I don't know why.
-	enumerator = [[outlineView_summary tableColumns] objectEnumerator];
-	while ((tableColumn = [enumerator nextObject])) {
+	for (NSTableColumn *tableColumn in outlineView_summary.tableColumns) {
 		NSString	*identifier = [tableColumn identifier];
 
 		if ([identifier isEqualToString:@"event"] || ([identifier isEqualToString:@"action"] && !eventIsExtended)) {
@@ -465,8 +461,6 @@
 {
 	//Get two parallel arrays for event IDs and the array of actions for that event ID
 	NSDictionary	*contactAlertsDict;
-	NSEnumerator	*enumerator;
-	NSString		*eventID;
 	NSString		*selectedEventID = nil;
 	
 	NSInteger		row = [outlineView_summary selectedRow];
@@ -488,9 +482,7 @@
 	[contactAlertsEvents release]; contactAlertsEvents = [[NSMutableArray alloc] init];
 	[contactAlertsActions release]; contactAlertsActions = [[NSMutableArray alloc] init];
 	
-	enumerator = [[adium.contactAlertsController sortedArrayOfEventIDsFromArray:[contactAlertsDict allKeys]] objectEnumerator];
-	
-	while ((eventID = [enumerator nextObject])) {
+	for (NSString *eventID in [adium.contactAlertsController sortedArrayOfEventIDsFromArray:[contactAlertsDict allKeys]]) {
 		[contactAlertsEvents addObject:eventID];
 		[contactAlertsActions addObject:[[contactAlertsDict objectForKey:eventID] sortedArrayUsingFunction:actionSort
 																								   context:NULL]];
@@ -498,8 +490,7 @@
 
 	//Now add events which have no actions at present
 	NSArray *sourceEventArray = (listObject ? [adium.contactAlertsController nonGlobalEventIDs] : [adium.contactAlertsController allEventIDs]);
-	enumerator = [[adium.contactAlertsController sortedArrayOfEventIDsFromArray:sourceEventArray] objectEnumerator];
-	while ((eventID = [enumerator nextObject])) {
+	for (NSString *eventID in [adium.contactAlertsController sortedArrayOfEventIDsFromArray:sourceEventArray]) {
 		if (![contactAlertsEvents containsObject:eventID]) {
 			[contactAlertsEvents addObject:eventID];
 			
diff -r 3f1e5d253f08 -r f8f09244f5f3 Plugins/Bonjour/libezv/Classes/EKEzvIncomingFileTransfer.m
--- a/Plugins/Bonjour/libezv/Classes/EKEzvIncomingFileTransfer.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Plugins/Bonjour/libezv/Classes/EKEzvIncomingFileTransfer.m	Sun Apr 29 15:09:07 2012 -0400
@@ -267,11 +267,9 @@
 		[permissionsToApply release]; permissionsToApply = nil;
 		return YES;
 	}
-	NSEnumerator *enumerator = [permissionsToApply keyEnumerator];
-	NSString *path;
 	NSDictionary *attributes;
 	NSFileManager *defaultManager = [NSFileManager defaultManager];
-	while ((path = [enumerator nextObject])) {
+	for (NSString *path in permissionsToApply) {
 		/* code that uses the returned key */
 		attributes = [permissionsToApply valueForKey:path];		
 		if (![defaultManager setAttributes:attributes ofItemAtPath:path error:NULL]) {
diff -r 3f1e5d253f08 -r f8f09244f5f3 Plugins/Dual Window Interface/AIMessageWindowController.m
--- a/Plugins/Dual Window Interface/AIMessageWindowController.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Plugins/Dual Window Interface/AIMessageWindowController.m	Sun Apr 29 15:09:07 2012 -0400
@@ -342,9 +342,6 @@
  */
 - (void)windowWillClose:(id)sender
 {
-    NSEnumerator			*enumerator;
-    AIMessageTabViewItem	*tabViewItem;
-	
 	if ([tabView_tabBar orientation] == PSMTabBarVerticalOrientation) {
 		CGFloat widthToStore;
 		if ([tabView_tabBar isTabBarHidden]) {
@@ -364,10 +361,10 @@
 	[adium.preferenceController unregisterPreferenceObserver:self];
 
     //Close all our tabs (The array will change as we remove tabs, so we must work with a copy)
-	enumerator = [[tabView_messages tabViewItems] reverseObjectEnumerator];
-    while ((tabViewItem = [enumerator nextObject])) {
-		[adium.interfaceController closeChat:tabViewItem.chat];
-	}
+	[[tabView_messages tabViewItems] enumerateObjectsWithOptions:NSEnumerationReverse
+													  usingBlock:^(id tabViewItem, NSUInteger idx, BOOL *stop) {
+		[adium.interfaceController closeChat:[(AIMessageTabViewItem *)tabViewItem chat]];
+	}];
 
 	//Chats have all closed, set active to nil, let the interface know we closed.  We should skip this step if our
 	//window is no longer visible, since in that case another window will have already became active.
@@ -704,14 +701,9 @@
 
 - (void)_reloadContainedChats
 {
-	NSEnumerator			*enumerator;
-	AIMessageTabViewItem	*tabViewItem;
-
 	//Update our contained chats array to mirror the order of the tabs
 	[m_containedChats release]; m_containedChats = [[NSMutableArray alloc] init];
-	enumerator = [[tabView_messages tabViewItems] objectEnumerator];
-	
-	while ((tabViewItem = [enumerator nextObject])) {
+	for (AIMessageTabViewItem *tabViewItem in [tabView_messages tabViewItems]) {
 		[tabViewItem setWindowController:self];
 		[m_containedChats addObject:[tabViewItem chat]];
 	}
@@ -1383,11 +1375,9 @@
 - (void)removeToolbarItemWithIdentifier:(NSString*)identifier
 {
 	NSArray			*itemArray = [toolbar items];
-	NSEnumerator	*enumerator = [itemArray objectEnumerator];
-	NSToolbarItem	*item;
 	NSInteger		idx = NSNotFound;
 
-	while ((item = [enumerator nextObject])) {
+	for (NSToolbarItem *item in itemArray) {
 		if ([[item itemIdentifier] isEqualToString:identifier]) {
 			idx = [itemArray indexOfObject:item];
 			break;
diff -r 3f1e5d253f08 -r f8f09244f5f3 Plugins/Emoticons/AIEmoticonPreferences.m
--- a/Plugins/Emoticons/AIEmoticonPreferences.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Plugins/Emoticons/AIEmoticonPreferences.m	Sun Apr 29 15:09:07 2012 -0400
@@ -164,13 +164,8 @@
 
 - (void)configurePreviewControllers
 {
-	NSEnumerator	*enumerator;
-	AIEmoticonPack	*pack;
-	NSView			*view;
-	
 	//First, remove any AIEmoticonPackPreviewView instances from the table
-	enumerator = [[[[table_emoticonPacks subviews] copy] autorelease] objectEnumerator];
-	while ((view = [enumerator nextObject])) {
+	for (NSView *view in [[[table_emoticonPacks subviews] copy] autorelease]) {
 		if ([view isKindOfClass:[AIEmoticonPackPreviewView class]]) {
 			[view removeFromSuperviewWithoutNeedingDisplay];
 		}
@@ -180,8 +175,7 @@
 	[emoticonPackPreviewControllers release];
 	emoticonPackPreviewControllers = [[NSMutableArray alloc] init];
 	
-	enumerator = [[adium.emoticonController availableEmoticonPacks] objectEnumerator];
-	while ((pack = [enumerator nextObject])) {
+	for (AIEmoticonPack *pack in [adium.emoticonController availableEmoticonPacks]) {
 		[emoticonPackPreviewControllers addObject:[AIEmoticonPackPreviewController previewControllerForPack:pack
 																								preferences:self]];
 	}
@@ -208,12 +202,9 @@
 
     //Set the row height to the average height of the emoticons
     if (selectedEmoticonPack) {
-        NSEnumerator    *enumerator;
-        AIEmoticon      *emoticon;
         NSInteger             totalHeight = 0;
         
-        enumerator = [[selectedEmoticonPack emoticons] objectEnumerator];
-        while ((emoticon = [enumerator nextObject])) {
+        for (AIEmoticon *emoticon in [selectedEmoticonPack emoticons]) {
             totalHeight += [[emoticon image] size].height;
         }
 
diff -r 3f1e5d253f08 -r f8f09244f5f3 Plugins/Invite to Chat Plugin/DCInviteToChatPlugin.m
--- a/Plugins/Invite to Chat Plugin/DCInviteToChatPlugin.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Plugins/Invite to Chat Plugin/DCInviteToChatPlugin.m	Sun Apr 29 15:09:07 2012 -0400
@@ -120,8 +120,6 @@
 	NSMenu			*menu_chatMenu = nil;
 	
 	if (contact && ![contact isKindOfClass:[AIListGroup class]] && ![contact isKindOfClass:[AIListBookmark class]]) {
-		NSEnumerator	*enumerator;
-		NSString		*serviceClass;
 		NSDictionary	*serviceDict;
 		NSMutableSet	*addedChats = nil;
 		NSUInteger		currentNumberOfItems, numberOfMenuItems = 0;
@@ -132,8 +130,7 @@
 					   [NSDictionary dictionaryWithObject:contact forKey:contact.service.serviceClass]);
 
 		//Iterate on each service. For an AIListMetacontact, this may be multiple services; for an AIListContact, this will just be a single iteration.
-		enumerator = [serviceDict keyEnumerator];
-		while ((serviceClass = [enumerator nextObject])) {
+		for (NSString *serviceClass in serviceDict) {
 			//Each iteration, if we have more menu items now than before, add a separator item
 			currentNumberOfItems = [menu_chatMenu numberOfItems];
 			if (currentNumberOfItems > numberOfMenuItems) {
@@ -142,10 +139,8 @@
 			}
 			
 			//Loop through all chats
-			NSEnumerator *chatEnumerator = [openChats objectEnumerator];
-			AIChat		*chat;
-			while ((chat = [chatEnumerator nextObject])) {				
-				//Is this the same serviceClass as this contact?				
+			for (AIChat *chat in openChats) {
+				//Is this the same serviceClass as this contact?
 				if (chat.isGroupChat &&
 					[chat.account.service.serviceClass isEqualToString:serviceClass]) {
 					
diff -r 3f1e5d253f08 -r f8f09244f5f3 Plugins/Nudge and Buzz Handler/AINudgeBuzzHandlerPlugin.m
--- a/Plugins/Nudge and Buzz Handler/AINudgeBuzzHandlerPlugin.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Plugins/Nudge and Buzz Handler/AINudgeBuzzHandlerPlugin.m	Sun Apr 29 15:09:07 2012 -0400
@@ -254,10 +254,8 @@
 	
 	// Find the correct choice to send for a meta contact.
 	if ([object isKindOfClass:[AIMetaContact class]]) {
-		NSEnumerator	*enumerator = [[(AIMetaContact *)object uniqueContainedObjects] objectEnumerator];
-		AIListContact	*contact = nil;		
+		for (AIListContact *contact in [(AIMetaContact *)object uniqueContainedObjects]) {
 		// Loop until the first contact supporting notifications
-		while ((contact = [enumerator nextObject])) {
 			if ([self contactDoesSupportNotification:contact]) {
 				sendChoice = contact;
 				break;
diff -r 3f1e5d253f08 -r f8f09244f5f3 Plugins/Purple Service/AMPurpleJabberServiceDiscoveryBrowserController.m
--- a/Plugins/Purple Service/AMPurpleJabberServiceDiscoveryBrowserController.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Plugins/Purple Service/AMPurpleJabberServiceDiscoveryBrowserController.m	Sun Apr 29 15:09:07 2012 -0400
@@ -271,9 +271,7 @@
 		
 		NSMutableArray *identities = [[NSMutableArray alloc] init];
 		
-		NSEnumerator *e = [[item identities] objectEnumerator];
-		NSDictionary *identity;
-		while ((identity = [e nextObject]))
+		for (NSDictionary *identity in [item identities])
 			[identities addObject:[NSString stringWithFormat:@"%@ (%@)",[identity objectForKey:@"category"],[identity objectForKey:@"type"]]];
 		
 		NSString *result = [identities componentsJoinedByString:@", "];
diff -r 3f1e5d253f08 -r f8f09244f5f3 Plugins/Purple Service/DCPurpleJabberJoinChatViewController.m
--- a/Plugins/Purple Service/DCPurpleJabberJoinChatViewController.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Plugins/Purple Service/DCPurpleJabberJoinChatViewController.m	Sun Apr 29 15:09:07 2012 -0400
@@ -153,15 +153,11 @@
 
 - (void)_configureTextField
 {
-	NSEnumerator		*enumerator;
-    AIListContact		*contact;
-	
 	//Clear the completing strings
 	[textField_inviteUsers setCompletingStrings:nil];
 	
 	//Configure the auto-complete view to autocomplete for contacts matching the selected account's service
-    enumerator = [adium.contactController.allContacts objectEnumerator];
-    while ((contact = [enumerator nextObject])) {
+	for (AIListContact *contact in adium.contactController.allContacts) {
 		if (contact.service == account.service) {
 			NSString *UID = contact.UID;
 			[textField_inviteUsers addCompletionString:contact.formattedUID withImpliedCompletion:UID];
diff -r 3f1e5d253f08 -r f8f09244f5f3 Plugins/Purple Service/DCPurpleMeanwhileJoinChatViewController.m
--- a/Plugins/Purple Service/DCPurpleMeanwhileJoinChatViewController.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Plugins/Purple Service/DCPurpleMeanwhileJoinChatViewController.m	Sun Apr 29 15:09:07 2012 -0400
@@ -101,15 +101,11 @@
 
 - (void)_configureTextField
 {
-	NSEnumerator		*enumerator;
-    AIListContact		*contact;
-	
 	//Clear the completing strings
 	[textField_inviteUsers setCompletingStrings:nil];
 	
 	//Configure the auto-complete view to autocomplete for contacts matching the selected account's service
-    enumerator = [adium.contactController.allContacts objectEnumerator];
-    while ((contact = [enumerator nextObject])) {
+    for (AIListContact *contact in adium.contactController.allContacts) {
 		if (contact.service == account.service) {
 			NSString *UID = contact.UID;
 			[textField_inviteUsers addCompletionString:contact.formattedUID withImpliedCompletion:UID];
diff -r 3f1e5d253f08 -r f8f09244f5f3 Plugins/Purple Service/DCPurpleOscarJoinChatViewController.m
--- a/Plugins/Purple Service/DCPurpleOscarJoinChatViewController.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Plugins/Purple Service/DCPurpleOscarJoinChatViewController.m	Sun Apr 29 15:09:07 2012 -0400
@@ -126,15 +126,11 @@
 
 - (void)_configureTextField
 {
-	NSEnumerator		*enumerator;
-    AIListContact		*contact;
-	
 	//Clear the completing strings
 	[textField_inviteUsers setCompletingStrings:nil];
 	
 	//Configure the auto-complete view to autocomplete for contacts matching the selected account's service
-    enumerator = [adium.contactController.allContacts objectEnumerator];
-    while ((contact = [enumerator nextObject])) {
+    for (AIListContact *contact in adium.contactController.allContacts) {
 		if (contact.service == account.service) {
 			NSString *UID = contact.UID;
 			[textField_inviteUsers addCompletionString:contact.formattedUID withImpliedCompletion:UID];
diff -r 3f1e5d253f08 -r f8f09244f5f3 Plugins/Purple Service/ESPurpleYahooAccountViewController.m
--- a/Plugins/Purple Service/ESPurpleYahooAccountViewController.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Plugins/Purple Service/ESPurpleYahooAccountViewController.m	Sun Apr 29 15:09:07 2012 -0400
@@ -70,8 +70,6 @@
 	NSMenu			*chatServerMenu = [[NSMenu allocWithZone:[NSMenu zone]] init];
 	NSMutableArray	*menuItems = [NSMutableArray array];
 	NSMenuItem		*menuItem;
-	NSEnumerator	*enumerator;
-	NSString		*prefix;
 	NSDictionary	*roomListServersDict;
 
 	roomListServersDict = [NSDictionary dictionaryWithObjectsAndKeys:
@@ -105,8 +103,7 @@
 	[menuItem setRepresentedObject:@"us"];
 	[menuItems addObject:menuItem];
 
-	enumerator = [roomListServersDict keyEnumerator];
-	while ((prefix = [enumerator nextObject])) {
+	for (NSString *prefix in roomListServersDict) {
 		menuItem = [[[NSMenuItem allocWithZone:[NSMenu menuZone]] initWithTitle:[roomListServersDict objectForKey:prefix]
 																		 target:nil
 																		 action:nil
diff -r 3f1e5d253f08 -r f8f09244f5f3 Plugins/Secure Messaging/ESSecureMessagingPlugin.m
--- a/Plugins/Secure Messaging/ESSecureMessagingPlugin.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Plugins/Secure Messaging/ESSecureMessagingPlugin.m	Sun Apr 29 15:09:07 2012 -0400
@@ -181,12 +181,11 @@
 	 * This will only be true when the toolbar is revealed for the first time having been hidden when window opened.
 	 */
 	if (![validatedItems containsObject:item]) {
-		NSEnumerator *enumerator = [[NSApp windows] objectEnumerator];
 		NSWindow	 *window;
 		NSToolbar	 *thisItemsToolbar = [item toolbar];
 		
 		//Look at each window to find the toolbar we are in
-		while ((window = [enumerator nextObject])) {
+		for (window in [NSApp windows]) {
 			if ([window toolbar] == thisItemsToolbar) break;
 		}
 		
@@ -285,11 +284,7 @@
 
 - (void)_updateToolbarIconOfChat:(AIChat *)chat inWindow:(NSWindow *)window
 {
-	NSToolbar		*toolbar = [window toolbar];
-	NSEnumerator	*enumerator = [[toolbar items] objectEnumerator];
-	NSToolbarItem	*item;
-	
-	while ((item = [enumerator nextObject])) {
+	for (NSToolbarItem *item in window.toolbar.items) {
 		if ([[item itemIdentifier] isEqualToString:@"Encryption"]) {
 			[self _updateToolbarItem:item forChat:chat];
 			break;
diff -r 3f1e5d253f08 -r f8f09244f5f3 Source/AIAppearancePreferences.m
--- a/Source/AIAppearancePreferences.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Source/AIAppearancePreferences.m	Sun Apr 29 15:09:07 2012 -0400
@@ -284,8 +284,6 @@
 - (NSMenu *)_emoticonPackMenu
 {
 	NSMenu			*menu = [[NSMenu allocWithZone:[NSMenu menuZone]] init];
-	NSEnumerator	*enumerator = [[adium.emoticonController availableEmoticonPacks] objectEnumerator];
-	AIEmoticonPack	*pack;
 	NSMenuItem		*menuItem;
 		
 	//Add the "No Emoticons" option
@@ -312,7 +310,7 @@
 	[menu addItem:[NSMenuItem separatorItem]];
 
 	//Emoticon Packs
-	while ((pack = [enumerator nextObject])) {
+	for (AIEmoticonPack *pack  in [adium.emoticonController availableEmoticonPacks]) {
 		menuItem = [[[NSMenuItem allocWithZone:[NSMenu menuZone]] initWithTitle:[pack name]
 																		 target:nil
 																		 action:nil
@@ -370,11 +368,8 @@
 - (NSArray *)_dockIconMenuArray
 {
 	NSMutableArray		*menuItemArray = [NSMutableArray array];
-	NSEnumerator		*enumerator;
-	NSString			*packPath;
 
-	enumerator = [[adium.dockController availableDockIconPacks] objectEnumerator];
-	while ((packPath = [enumerator nextObject])) {
+	for (NSString *packPath in [adium.dockController availableDockIconPacks]) {
 		[menuItemArray addObject:[self meuItemForDockIconPackAtPath:packPath]];
 	}
 
diff -r 3f1e5d253f08 -r f8f09244f5f3 Source/AIContactSortSelectionPlugin.m
--- a/Source/AIContactSortSelectionPlugin.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Source/AIContactSortSelectionPlugin.m	Sun Apr 29 15:09:07 2012 -0400
@@ -97,9 +97,8 @@
 	NSString *identifier = [adium.preferenceController preferenceForKey:KEY_CURRENT_SORT_MODE_IDENTIFIER
 														  group:PREF_GROUP_CONTACT_SORTING];
 	
-	NSEnumerator *enumerator = [[AISortController availableSortControllers] objectEnumerator];
 	AISortController *controller = nil;
-	while ((controller = [enumerator nextObject])) {
+	for (controller in [AISortController availableSortControllers]) {
 		if ([identifier compare:[controller identifier]] == NSOrderedSame) {
 			[AISortController setActiveSortController:controller];
 			break;
diff -r 3f1e5d253f08 -r f8f09244f5f3 Source/AIInfoInspectorPane.m
--- a/Source/AIInfoInspectorPane.m	Fri Apr 27 01:13:46 2012 -0400
+++ b/Source/AIInfoInspectorPane.m	Sun Apr 29 15:09:07 2012 -0400
@@ -418,14 +418,12 @@
     [table setHidesEmptyCells:YES];
 
 	NSMutableAttributedString		*result = [[[NSMutableAttributedString alloc] init] autorelease];
-	NSEnumerator					*enumerator = [profileArray objectEnumerator];
-	NSDictionary					*lineDict;
 	
-	BOOL							shownAnyContent = NO;
+	__block BOOL					shownAnyContent = NO;
 	
-	for (NSInteger row = 0; (lineDict = [enumerator nextObject]); row++) {
+	[profileArray enumerateObjectsUsingBlock:^(id lineDict, NSUInteger row, BOOL *stop) {
 		if ([[lineDict objectForKey:KEY_TYPE] integerValue] == AIUserInfoSectionBreak && shownAnyContent == NO) {
-			continue;
+			return;
 		}
 		
 		NSAttributedString *value = nil, *key = nil;
@@ -505,7 +503,7 @@
 		}
 		
 		shownAnyContent = YES;
-	}




More information about the commits mailing list