• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/toolchains/hndtools-armeabi-2011.09/share/doc/arm-arm-none-eabi/html/gcc/
1<html lang="en">
2<head>
3<title>Fast enumeration details - Using the GNU Compiler Collection (GCC)</title>
4<meta http-equiv="Content-Type" content="text/html">
5<meta name="description" content="Using the GNU Compiler Collection (GCC)">
6<meta name="generator" content="makeinfo 4.13">
7<link title="Top" rel="start" href="index.html#Top">
8<link rel="up" href="Fast-enumeration.html#Fast-enumeration" title="Fast enumeration">
9<link rel="prev" href="c99_002dlike-fast-enumeration-syntax.html#c99_002dlike-fast-enumeration-syntax" title="c99-like fast enumeration syntax">
10<link rel="next" href="Fast-enumeration-protocol.html#Fast-enumeration-protocol" title="Fast enumeration protocol">
11<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
12<!--
13Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
141998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
152010 Free Software Foundation, Inc.
16
17Permission is granted to copy, distribute and/or modify this document
18under the terms of the GNU Free Documentation License, Version 1.3 or
19any later version published by the Free Software Foundation; with the
20Invariant Sections being ``Funding Free Software'', the Front-Cover
21Texts being (a) (see below), and with the Back-Cover Texts being (b)
22(see below).  A copy of the license is included in the section entitled
23``GNU Free Documentation License''.
24
25(a) The FSF's Front-Cover Text is:
26
27     A GNU Manual
28
29(b) The FSF's Back-Cover Text is:
30
31     You have freedom to copy and modify this GNU Manual, like GNU
32     software.  Copies published by the Free Software Foundation raise
33     funds for GNU development.-->
34<meta http-equiv="Content-Style-Type" content="text/css">
35<style type="text/css"><!--
36  pre.display { font-family:inherit }
37  pre.format  { font-family:inherit }
38  pre.smalldisplay { font-family:inherit; font-size:smaller }
39  pre.smallformat  { font-family:inherit; font-size:smaller }
40  pre.smallexample { font-size:smaller }
41  pre.smalllisp    { font-size:smaller }
42  span.sc    { font-variant:small-caps }
43  span.roman { font-family:serif; font-weight:normal; } 
44  span.sansserif { font-family:sans-serif; font-weight:normal; } 
45--></style>
46<link rel="stylesheet" type="text/css" href="../cs.css">
47</head>
48<body>
49<div class="node">
50<a name="Fast-enumeration-details"></a>
51<p>
52Next:&nbsp;<a rel="next" accesskey="n" href="Fast-enumeration-protocol.html#Fast-enumeration-protocol">Fast enumeration protocol</a>,
53Previous:&nbsp;<a rel="previous" accesskey="p" href="c99_002dlike-fast-enumeration-syntax.html#c99_002dlike-fast-enumeration-syntax">c99-like fast enumeration syntax</a>,
54Up:&nbsp;<a rel="up" accesskey="u" href="Fast-enumeration.html#Fast-enumeration">Fast enumeration</a>
55<hr>
56</div>
57
58<h4 class="subsection">8.9.3 Fast enumeration details</h4>
59
60<p>Here is a more technical description with the gory details.  Consider the code
61
62<pre class="smallexample">       for (<var>object expression</var> in <var>collection expression</var>)
63       {
64         <var>statements</var>
65       }
66</pre>
67 <p>here is what happens when you run it:
68
69     <ul>
70<li><var>collection expression</var> is evaluated exactly once and the
71result is used as the collection object to iterate over.  This means
72it is safe to write code such as <code>for (object in [NSDictionary
73keyEnumerator]) ...</code>.
74
75     <li>the iteration is implemented by the compiler by repeatedly getting
76batches of objects from the collection object using the fast
77enumeration protocol (see below), then iterating over all objects in
78the batch.  This is faster than a normal enumeration where objects are
79retrieved one by one (hence the name &ldquo;fast enumeration&rdquo;).
80
81     <li>if there are no objects in the collection, then
82<var>object expression</var> is set to <code>nil</code> and the loop
83immediately terminates.
84
85     <li>if there are objects in the collection, then for each object in the
86collection (in the order they are returned) <var>object expression</var>
87is set to the object, then <var>statements</var> are executed.
88
89     <li><var>statements</var> can contain <code>break</code> and <code>continue</code>
90commands, which will abort the iteration or skip to the next loop
91iteration as expected.
92
93     <li>when the iteration ends because there are no more objects to iterate
94over, <var>object expression</var> is set to <code>nil</code>.  This allows
95you to determine whether the iteration finished because a <code>break</code>
96command was used (in which case <var>object expression</var> will remain
97set to the last object that was iterated over) or because it iterated
98over all the objects (in which case <var>object expression</var> will be
99set to <code>nil</code>).
100
101     <li><var>statements</var> must not make any changes to the collection
102object; if they do, it is a hard error and the fast enumeration
103terminates by invoking <code>objc_enumerationMutation</code>, a runtime
104function that normally aborts the program but which can be customized
105by Foundation libraries via <code>objc_set_mutation_handler</code> to do
106something different, such as raising an exception.
107
108 </ul>
109
110<!-- ================================ -->
111 </body></html>
112
113