title: Why do I see "Object of class __NSCFString autoreleased with no pool in place" in this simple Monotouch code?
body: <p>Monotouch 5.0.2.</p>
  
  <p>Running the simple code below I get this in the output panel:</p>
  
  <pre><code>objc[20283]: Object 0x9c08110 of class __NSCFString autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
  objc[20283]: Object 0x9c07840 of class __NSCFData autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
  </code></pre>
  
  <p>Which NSStrings are leaking here and why? It seems to be enough to just create a new Uri() and a new WebClient() objetc. The event handler doesn't even have to be attached.</p>
  
  <pre><code>using System;
  using MonoTouch.Foundation;
  using MonoTouch.UIKit;
  using System.Net;
  using System.IO;
  
  namespace DownloadTest
  {
      [Register ("AppDelegate")]
      public partial class AppDelegate : UIApplicationDelegate
      { 
          UIWindow window;
  
          public override bool FinishedLaunching (UIApplication app, NSDictionary options)
          {
              window = new UIWindow (UIScreen.MainScreen.Bounds);
  
              UIButton btn = UIButton.FromType (UIButtonType.RoundedRect);
              btn.Frame = new System.Drawing.RectangleF (40, 40, 100, 30);
              btn.TouchUpInside += delegate {
                  // These two lines seem to caus the leak.
                  Uri uri = new Uri ("http://silverlightinaction.com/video3.wmv");
                  WebClient webClient = new WebClient ();
                  // This line does not matter, the info about the leaking NSString alsp appears without an event being attached.
                  webClient.OpenReadAsync (uri);                             
              };
              window.AddSubview (btn);
  
              window.MakeKeyAndVisible ();
  
              return true;
          }
  
          void HandleWebClientOpenReadCompleted (object sender, OpenReadCompletedEventArgs e)
          {
              using (var pool = new NSAutoreleasePool())
              {
                  using (Stream stream = e.Result)
                  using (FileStream fileStream = File.OpenWrite(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "download.bin")))
                  {
                      stream.CopyTo (fileStream, 30000);
                      stream.Close ();
                      fileStream.Close ();
                  }
              }
          }
      }
  }
  </code></pre>