From 2aeb0c29b4b7ec21ee4160692b20221816628c4e Mon Sep 17 00:00:00 2001 From: Rustam Zaitov Date: Thu, 13 Mar 2014 13:26:13 +0400 Subject: [PATCH] =?UTF-8?q?=20=D0=9F=D1=80=D0=B8=D0=BC=D0=B5=D1=80?= =?UTF-8?q?=20=D1=83=D1=82=D0=B5=D1=87=D0=BA=D0=B8=20=D0=BF=D0=B0=D0=BC?= =?UTF-8?q?=D1=8F=D1=82=D0=B8=20=D0=BF=D1=80=D0=B8=20=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D1=89=D0=B5=D0=BD=D0=BD=D0=B8=D0=B8=20=D0=BA=20=D1=81?= =?UTF-8?q?=D0=B2=D0=BE=D0=B9=D1=81=D1=82=D0=B2=D1=83=20SuperView?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SuperViewMemLeak/RefCycles.userprefs | 31 ++++++ SuperViewMemLeak/SuperViewMemLeak.sln | 32 ++++++ SuperViewMemLeak/SuperViewMemLeak.userprefs | 22 ++++ .../SuperViewMemLeak/AppDelegate.cs | 29 +++++ .../SuperViewMemLeak/Entitlements.plist | 6 + SuperViewMemLeak/SuperViewMemLeak/Info.plist | 22 ++++ SuperViewMemLeak/SuperViewMemLeak/Main.cs | 19 ++++ .../SuperViewMemLeak/MainController.cs | 77 +++++++++++++ .../SuperViewMemLeak/SuperViewMemLeak.csproj | 105 ++++++++++++++++++ 9 files changed, 343 insertions(+) create mode 100644 SuperViewMemLeak/RefCycles.userprefs create mode 100644 SuperViewMemLeak/SuperViewMemLeak.sln create mode 100644 SuperViewMemLeak/SuperViewMemLeak.userprefs create mode 100644 SuperViewMemLeak/SuperViewMemLeak/AppDelegate.cs create mode 100644 SuperViewMemLeak/SuperViewMemLeak/Entitlements.plist create mode 100644 SuperViewMemLeak/SuperViewMemLeak/Info.plist create mode 100644 SuperViewMemLeak/SuperViewMemLeak/Main.cs create mode 100644 SuperViewMemLeak/SuperViewMemLeak/MainController.cs create mode 100644 SuperViewMemLeak/SuperViewMemLeak/SuperViewMemLeak.csproj diff --git a/SuperViewMemLeak/RefCycles.userprefs b/SuperViewMemLeak/RefCycles.userprefs new file mode 100644 index 0000000..7e3232c --- /dev/null +++ b/SuperViewMemLeak/RefCycles.userprefs @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SuperViewMemLeak/SuperViewMemLeak.sln b/SuperViewMemLeak/SuperViewMemLeak.sln new file mode 100644 index 0000000..092b4ac --- /dev/null +++ b/SuperViewMemLeak/SuperViewMemLeak.sln @@ -0,0 +1,32 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SuperViewMemLeak", "SuperViewMemLeak\SuperViewMemLeak.csproj", "{5C615257-AE59-40B4-9BDC-1F614526BEAD}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|iPhoneSimulator = Debug|iPhoneSimulator + Release|iPhoneSimulator = Release|iPhoneSimulator + Debug|iPhone = Debug|iPhone + Release|iPhone = Release|iPhone + Ad-Hoc|iPhone = Ad-Hoc|iPhone + AppStore|iPhone = AppStore|iPhone + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5C615257-AE59-40B4-9BDC-1F614526BEAD}.Ad-Hoc|iPhone.ActiveCfg = Ad-Hoc|iPhone + {5C615257-AE59-40B4-9BDC-1F614526BEAD}.Ad-Hoc|iPhone.Build.0 = Ad-Hoc|iPhone + {5C615257-AE59-40B4-9BDC-1F614526BEAD}.AppStore|iPhone.ActiveCfg = AppStore|iPhone + {5C615257-AE59-40B4-9BDC-1F614526BEAD}.AppStore|iPhone.Build.0 = AppStore|iPhone + {5C615257-AE59-40B4-9BDC-1F614526BEAD}.Debug|iPhone.ActiveCfg = Debug|iPhone + {5C615257-AE59-40B4-9BDC-1F614526BEAD}.Debug|iPhone.Build.0 = Debug|iPhone + {5C615257-AE59-40B4-9BDC-1F614526BEAD}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator + {5C615257-AE59-40B4-9BDC-1F614526BEAD}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator + {5C615257-AE59-40B4-9BDC-1F614526BEAD}.Release|iPhone.ActiveCfg = Release|iPhone + {5C615257-AE59-40B4-9BDC-1F614526BEAD}.Release|iPhone.Build.0 = Release|iPhone + {5C615257-AE59-40B4-9BDC-1F614526BEAD}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator + {5C615257-AE59-40B4-9BDC-1F614526BEAD}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator + EndGlobalSection + GlobalSection(MonoDevelopProperties) = preSolution + StartupItem = SuperViewMemLeak\SuperViewMemLeak.csproj + EndGlobalSection +EndGlobal diff --git a/SuperViewMemLeak/SuperViewMemLeak.userprefs b/SuperViewMemLeak/SuperViewMemLeak.userprefs new file mode 100644 index 0000000..f7f66b1 --- /dev/null +++ b/SuperViewMemLeak/SuperViewMemLeak.userprefs @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SuperViewMemLeak/SuperViewMemLeak/AppDelegate.cs b/SuperViewMemLeak/SuperViewMemLeak/AppDelegate.cs new file mode 100644 index 0000000..3ddb52d --- /dev/null +++ b/SuperViewMemLeak/SuperViewMemLeak/AppDelegate.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using MonoTouch.Foundation; +using MonoTouch.UIKit; + +namespace RefCycles +{ + // The UIApplicationDelegate for the application. This class is responsible for launching the + // User Interface of the application, as well as listening (and optionally responding) to + // application events from iOS. + [Register ("AppDelegate")] + public partial class AppDelegate : UIApplicationDelegate + { + // class-level declarations + UIWindow window; + MainController _mainController; + public override bool FinishedLaunching (UIApplication app, NSDictionary options) + { + window = new UIWindow (UIScreen.MainScreen.Bounds); + _mainController = new MainController (); + window.RootViewController = _mainController; + window.MakeKeyAndVisible (); + + return true; + } + } +} + diff --git a/SuperViewMemLeak/SuperViewMemLeak/Entitlements.plist b/SuperViewMemLeak/SuperViewMemLeak/Entitlements.plist new file mode 100644 index 0000000..5ea1ec7 --- /dev/null +++ b/SuperViewMemLeak/SuperViewMemLeak/Entitlements.plist @@ -0,0 +1,6 @@ + + + + + + diff --git a/SuperViewMemLeak/SuperViewMemLeak/Info.plist b/SuperViewMemLeak/SuperViewMemLeak/Info.plist new file mode 100644 index 0000000..bb8383d --- /dev/null +++ b/SuperViewMemLeak/SuperViewMemLeak/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDisplayName + RefCycles + CFBundleIdentifier + com.your-company.RefCycles + UIDeviceFamily + + 1 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + MinimumOSVersion + 6.0 + + diff --git a/SuperViewMemLeak/SuperViewMemLeak/Main.cs b/SuperViewMemLeak/SuperViewMemLeak/Main.cs new file mode 100644 index 0000000..9fec489 --- /dev/null +++ b/SuperViewMemLeak/SuperViewMemLeak/Main.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using MonoTouch.Foundation; +using MonoTouch.UIKit; + +namespace RefCycles +{ + public class Application + { + // This is the main entry point of the application. + static void Main (string[] args) + { + // if you want to use a different Application Delegate class from "AppDelegate" + // you can specify it here. + UIApplication.Main (args, null, "AppDelegate"); + } + } +} diff --git a/SuperViewMemLeak/SuperViewMemLeak/MainController.cs b/SuperViewMemLeak/SuperViewMemLeak/MainController.cs new file mode 100644 index 0000000..bb17c3a --- /dev/null +++ b/SuperViewMemLeak/SuperViewMemLeak/MainController.cs @@ -0,0 +1,77 @@ +using System; + +using MonoTouch.UIKit; +using System.Drawing; +using System.Reflection; + +namespace RefCycles +{ + public class MainController : UIViewController + { + private UIButton _button; + + public override void ViewDidLoad () + { + base.ViewDidLoad (); + View.BackgroundColor = UIColor.White; + + _button = new UIButton (new RectangleF(10f, 30f, 0f, 0f)); + _button.TouchUpInside += HandleTouchUpInside; + _button.SetTitle ("click me", UIControlState.Normal); + _button.SetTitleColor (UIColor.Blue, UIControlState.Normal); + _button.SizeToFit (); + + View.AddSubview (_button); + } + + private void HandleTouchUpInside (object sender, EventArgs e) + { + Console.WriteLine ("HandleTouchUpInside"); + + /* + // Dont leak + UIView v1 = new UIView (); + UIView v2 = new UIView (); + */ + + /* + // Dont leak + UIView v1 = new DebugView (); + UIView v2 = new UIView (); + */ + + /* + // Leak + UIView v1 = new UIView (); + UIView v2 = new DebugView (); + */ + + // Leak + UIView v1 = new DebugView (); + UIView v2 = new DebugView (); + + + v1.AddSubview (v2); + View.AddSubview (v1); + + var sv = v2.Superview; // cause of leak + //v2.ResetSuperViewChache (); // uncomment to fix + + v1.RemoveFromSuperview (); + } + } + + public class DebugView: UIView + { + } + + public static class Ext + { + public static void ResetSuperViewChache(this UIView view) + { + Type t = typeof(UIView); + FieldInfo fInfo = t.GetField("__mt_Superview_var", BindingFlags.NonPublic | BindingFlags.Instance); + fInfo.SetValue (view, null); + } + } +} \ No newline at end of file diff --git a/SuperViewMemLeak/SuperViewMemLeak/SuperViewMemLeak.csproj b/SuperViewMemLeak/SuperViewMemLeak/SuperViewMemLeak.csproj new file mode 100644 index 0000000..1581da1 --- /dev/null +++ b/SuperViewMemLeak/SuperViewMemLeak/SuperViewMemLeak.csproj @@ -0,0 +1,105 @@ + + + + Debug + iPhoneSimulator + 10.0.0 + 2.0 + {5C615257-AE59-40B4-9BDC-1F614526BEAD} + {6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Exe + RefCycles + Resources + RefCycles + + + true + full + false + bin\iPhoneSimulator\Debug + DEBUG; + prompt + 4 + false + None + Entitlements.plist + true + true + true + + + full + true + bin\iPhoneSimulator\Release + prompt + 4 + None + false + Entitlements.plist + + + true + full + false + bin\iPhone\Debug + DEBUG; + prompt + 4 + false + Entitlements.plist + true + iPhone Developer + + + full + true + bin\iPhone\Release + prompt + 4 + Entitlements.plist + false + iPhone Developer + + + full + true + bin\iPhone\Ad-Hoc + prompt + 4 + false + Entitlements.plist + true + Automatic:AdHoc + iPhone Distribution + + + full + true + bin\iPhone\AppStore + prompt + 4 + iPhone Distribution + Entitlements.plist + false + Automatic:AppStore + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file