WEBVTT

00:00:00.000 --> 00:00:01.680
>> Ladění na tento týden
Xamarin ukazuje, kde

00:00:01.680 --> 00:00:03.360
můj dobrý přítel Alexi při mluvení

00:00:03.360 --> 00:00:06.810
o správě paměti pro
vaše aplikace. Tak se nalaďte.

00:00:06.810 --> 00:00:13.200
HUDBY

00:00:13.200 --> 00:00:14.280
>> Vítejte zpět, všichni

00:00:14.280 --> 00:00:15.405
na Xamarin show.

00:00:15.405 --> 00:00:16.650
Jsem váš hostitel James Montemagno.

00:00:16.650 --> 00:00:17.820
Dnes, můj nejlepší kamarád v

00:00:17.820 --> 00:00:21.270
celý svět Alexej s
Mě. Jak to jde, kámo?

00:00:21.270 --> 00:00:22.905
>> Jsem v pohodě. Co ty?

00:00:22.905 --> 00:00:24.960
>> Dělám fantasticky.
Je krásný den

00:00:24.960 --> 00:00:26.640
tady v Redmontu, ve Washingtonu každý den.

00:00:26.640 --> 00:00:27.325
>> Je.

00:00:27.325 --> 00:00:29.085
>> Nyní jste z naší mobilní

00:00:29.085 --> 00:00:31.065
poradenství pro zákazníky
tým, je to tak?

00:00:31.065 --> 00:00:31.920
>> To je správně.

00:00:31.920 --> 00:00:33.450
>> Tak co to znamená?

00:00:33.450 --> 00:00:35.370
>> To znamená, že pracujeme s

00:00:35.370 --> 00:00:38.250
našim klientům a
jim radil očividně.

00:00:38.250 --> 00:00:41.645
Ale většinou pracujeme s vývojáři
a zjistíte, jak používají nástroje,

00:00:41.645 --> 00:00:44.300
Jak pracují s naším nástrojem Xamarin,

00:00:44.300 --> 00:00:47.560
a jaké jsou společné
nástrahy, kterým čelí.

00:00:47.560 --> 00:00:48.420
>> Perfektní.

00:00:48.420 --> 00:00:50.205
>> Dnes chci mluvit o

00:00:50.205 --> 00:00:52.355
jednou z nich je Správa paměti.

00:00:52.355 --> 00:00:53.780
>> Mám tě. Ano. Je to velmi důležité

00:00:53.780 --> 00:00:55.730
protože často mluvíme
o všem tom chladném,

00:00:55.730 --> 00:00:57.155
ozdobné funkce, které můžete provádět,

00:00:57.155 --> 00:01:00.440
ale chtěli jsme
série doporučených postupů

00:01:00.440 --> 00:01:02.340
protože máš problémy.

00:01:02.340 --> 00:01:03.820
To se stává. Je to tak snadný.

00:01:03.820 --> 00:01:06.345
Správa paměti,
Upřímně, jsem nesvá.

00:01:06.345 --> 00:01:07.770
Opravdu nevím. Jsem jen jako,

00:01:07.770 --> 00:01:09.560
"Chtějí zabít
Moje aplikace za pět vteřin.

00:01:09.560 --> 00:01:11.705
Na tom nezáleží, že? Ale
Takhle bych to nemyslel.

00:01:11.705 --> 00:01:14.210
>> To je pravda. To vidíme

00:01:14.210 --> 00:01:16.850
protože nikoho nezajímá
správu paměti.

00:01:16.850 --> 00:01:21.300
Máme tolik paměti
a nikdy je nezkontroluji.

00:01:21.300 --> 00:01:24.750
Chci říct, kdy jsi naposledy
zkontroloval využití paměti aplikace?

00:01:24.750 --> 00:01:26.250
>> Naposledy, když jsem dostal havárii.

00:01:26.250 --> 00:01:29.510
Vlastně jsem měl velmi
dobrý příklad.

00:01:29.510 --> 00:01:31.910
Řeknu vám tohle. Tento
je příklad reálného světa.

00:01:31.910 --> 00:01:35.120
Mám brouka v Xamarin Essentials.

00:01:35.120 --> 00:01:38.375
to říká, když zavolám
tuto metodu 20 000 krát,

00:01:38.375 --> 00:01:41.570
zhroucení aplikace a
bylo proto, že jsem

00:01:41.570 --> 00:01:45.155
správné odstranění
nativní objekt Android,

00:01:45.155 --> 00:01:46.775
okno, displej.

00:01:46.775 --> 00:01:48.170
Takže co se děje je,

00:01:48.170 --> 00:01:50.480
Stále bych ho vytvářel
a nikdy by se

00:01:50.480 --> 00:01:53.135
úklid, protože
Nikdy jsem to nelikvidací.

00:01:53.135 --> 00:01:54.890
>> To je to co teď
o dnešku mluvit.

00:01:54.890 --> 00:01:56.925
>> Ano. Děs. Pojďme
to. Co pro nás máte?

00:01:56.925 --> 00:02:00.435
>> Tak malý
jednoduchá aplikace se dvěma okny,

00:02:00.435 --> 00:02:02.745
obrazovky hlavní obrazovka a podrobnosti.

00:02:02.745 --> 00:02:06.375
To je velmi běžná struktura
Navigační řadič uživatelského rozhraní.

00:02:06.375 --> 00:02:09.600
Tohle je obyčejný Xamarin
aplikace iOS, že?

00:02:09.600 --> 00:02:10.305
>> Dobře.

00:02:10.305 --> 00:02:12.440
>> Co budeme
je zavést

00:02:12.440 --> 00:02:14.930
nevracení paměti v mnoha,
mnoha různými způsoby.

00:02:14.930 --> 00:02:19.025
Ale nejdřív si chci promluvit o
rozdíly od rodného světa

00:02:19.025 --> 00:02:23.960
a spravovaný svět
výkon a paměť.

00:02:23.960 --> 00:02:25.340
Takže kdykoliv budete mít nějaký proces,

00:02:25.340 --> 00:02:27.995
operační systém poskytující
ti paměťový blok.

00:02:27.995 --> 00:02:31.370
Měli byste si být vědomi toho, že
protože jakmile je nedostatek paměti,

00:02:31.370 --> 00:02:33.670
zhroucení aplikace nebo
operační systém ho zabije.

00:02:33.670 --> 00:02:35.355
Ve spravované paměti

00:02:35.355 --> 00:02:40.260
Naše Xamarin mono
malý kousek této paměti.

00:02:40.260 --> 00:02:41.630
Tehdy bychom měli být

00:02:41.630 --> 00:02:43.670
opatrní v tom, jak jsme
použít i tento kus.

00:02:43.670 --> 00:02:44.030
>> Dobře.

00:02:44.030 --> 00:02:46.640
>> Takže stále byste měli být
povědomí o nativní paměti,

00:02:46.640 --> 00:02:48.905
a nyní, jakmile budete pracovat s Xamarin,

00:02:48.905 --> 00:02:50.320
také informováni o části správy.

00:02:50.320 --> 00:02:52.740
>> Mám to. Takže máte
nativní paměť, iOS,

00:02:52.740 --> 00:02:55.980
Kousky a kousky androida,
Spravované paměti .NET?

00:02:55.980 --> 00:02:56.640
>> To je pravda.

00:02:56.640 --> 00:02:57.090
>> Perfektní.

00:02:57.090 --> 00:03:00.530
>> Při každém vytvoření objektu
a Vy vytvoříte, řekněme,

00:03:00.530 --> 00:03:02.330
tlačítko uživatelského rozhraní, ve skutečnosti vytvoříte

00:03:02.330 --> 00:03:04.950
nativní tlačítko uživatelského rozhraní a
spravované třídy tlačítka uživatelského rozhraní.

00:03:04.950 --> 00:03:06.680
Mají jiný dopad na paměť.

00:03:06.680 --> 00:03:10.310
Mohly by způsobit různé
potíže s pamětí, protože

00:03:10.310 --> 00:03:14.135
také nativní způsob sběru
odpadne a řízne.

00:03:14.135 --> 00:03:20.385
V mono se používá jednojednolůžkový
generaci uvolňováním paměti.

00:03:20.385 --> 00:03:23.460
V původním světě používá iOS ARC,

00:03:23.460 --> 00:03:26.680
Android používá svůj vlastní
systém uvolňování paměti,

00:03:26.680 --> 00:03:29.420
měly by však spolupracovat
bok po boku a měli bychom

00:03:29.420 --> 00:03:32.300
mít, protože můžete
s použitím tohoto řešení způsobit problémy.

00:03:32.300 --> 00:03:32.690
>> Mám to.

00:03:32.690 --> 00:03:34.640
>> Takže první a

00:03:34.640 --> 00:03:36.950
nejjednodušší přístup k zavedení

00:03:36.950 --> 00:03:40.830
problémy s pamětí je předplatné
bez odběru.

00:03:42.040 --> 00:03:45.680
Systém uvolňování paměti by měl vědět
Když je tam smetí.

00:03:45.680 --> 00:03:47.180
Ale jak to mohl vědět?

00:03:47.180 --> 00:03:49.565
Mělo by být schopno sestavit

00:03:49.565 --> 00:03:53.915
graf stromu dosažitelnosti
a začíná z cest.

00:03:53.915 --> 00:03:57.320
Naše statické události, statické proměnné,

00:03:57.320 --> 00:03:59.350
statické události nebo volání při převrácení podprocesů,

00:03:59.350 --> 00:04:01.910
jsou to všechny dosažitelné trasy a

00:04:01.910 --> 00:04:05.005
systém uvolňování paměti
jako ne smetí.

00:04:05.005 --> 00:04:06.810
Takže když se takhle přihlásíte,

00:04:06.810 --> 00:04:09.560
budeme mít zásuvný modul pro připojení.

00:04:09.560 --> 00:04:11.960
Já vím, Jamesi, ty jsi
obeznámen s tímto modulem plug-in.

00:04:11.960 --> 00:04:13.400
>> Jsem. Ano. Hodně.

00:04:13.400 --> 00:04:14.960
To se mi líbí. In
Tady jsme jen co?

00:04:14.960 --> 00:04:16.220
Přihlášení k odběru události,

00:04:16.220 --> 00:04:18.610
a mohl by to být jakýkoliv
události jako událost Click,

00:04:18.610 --> 00:04:20.360
máte událost ke změně senzorů.

00:04:20.360 --> 00:04:22.715
V podstatě cokoliv v .NET.

00:04:22.715 --> 00:04:25.970
>> Ano. Je specifický
ne jen Xamarin.

00:04:25.970 --> 00:04:27.830
Je to nějaká statická událost

00:04:27.830 --> 00:04:31.745
v rozhraní .NET a připojení
Tady je jen příklad.

00:04:31.745 --> 00:04:35.390
Snažím se říct, že to
může být jakákoliv statická událost nebo

00:04:35.390 --> 00:04:38.960
jakákoliv ojedinělý poskytnutý případ.

00:04:38.960 --> 00:04:40.880
Takže, kdykoli se budeme takhle přihlašovat,

00:04:40.880 --> 00:04:42.520
a dejme tomu, že máme

00:04:42.520 --> 00:04:47.100
Tento malý kousek
Obslužná rutina pro metodu,

00:04:47.100 --> 00:04:49.655
Představujeme malou nevrácenou paměť.

00:04:49.655 --> 00:04:54.290
Je malý, protože náš názor je
jednoduché a lehké,

00:04:54.290 --> 00:04:55.400
ale je to únik paměti.

00:04:55.400 --> 00:04:57.685
>> Takže je to únik paměti, proč?

00:04:57.685 --> 00:05:00.860
>> Protože toto připojení a

00:05:00.860 --> 00:05:03.830
Událost,
je statický odkaz

00:05:03.830 --> 00:05:05.270
pro náš systém uvolňování paměti.

00:05:05.270 --> 00:05:06.980
Jakmile naše popelnice
kolektor se pokouší

00:05:06.980 --> 00:05:08.810
zjistit, zda je to odpad nebo ne,

00:05:08.810 --> 00:05:11.015
není to proto, že

00:05:11.015 --> 00:05:14.540
Událost, která byla změněna
odkaz na tuto obslužnou rutinu,

00:05:14.540 --> 00:05:17.375
a tato obslužná rutina ve skutečnosti zpracovává

00:05:17.375 --> 00:05:21.080
odkaz na naši
DetailsViewController.

00:05:21.080 --> 00:05:24.680
>> Vidím. Jasně. Takže jsme
vytvořila tuto událost uvnitř

00:05:24.680 --> 00:05:29.600
Tento ovládací prvek ViewController a já
upsaný, ale nikdy nepřihlášen k odběru.

00:05:29.600 --> 00:05:31.970
Takže to má vždycky
okamžitě referenci.

00:05:31.970 --> 00:05:34.940
Takže odpadkolektory říkají,
"Hej, co je k dispozici?"

00:05:34.940 --> 00:05:37.030
Jde o to, "to nemůžeš mít."

00:05:37.030 --> 00:05:38.205
>> To je správně.

00:05:38.205 --> 00:05:40.580
>> Chci zajistit, aby
To je správné, protože jsem

00:05:40.580 --> 00:05:42.185
uvěřit, že takhle
pracuje v mé mysli.

00:05:42.185 --> 00:05:43.150
Chci mít jistotu, že mám pravdu.

00:05:43.150 --> 00:05:47.225
>> Jedna úloha se systémem uvolňování paměti
znamená navrátit paměť,

00:05:47.225 --> 00:05:48.605
a správně,

00:05:48.605 --> 00:05:50.540
systém uvolňování paměti by měl vědět, jak

00:05:50.540 --> 00:05:52.730
správně určit, zda
je to odpad nebo ne.

00:05:52.730 --> 00:05:53.180
>> Mám to.

00:05:53.180 --> 00:05:55.790
>> Aby se tak postavil strom dosažitelnosti,

00:05:55.790 --> 00:05:59.270
systém uvolňování paměti
používá statické trasy nebo

00:05:59.270 --> 00:06:01.430
pouze trasy a statické události

00:06:01.430 --> 00:06:03.500
nebo jakákoliv statická vlastnost
jako jednu z cest.

00:06:03.500 --> 00:06:06.460
Také místní proměnné,
spoustu jiných věcí.

00:06:06.460 --> 00:06:07.020
>> Mám to.

00:06:07.020 --> 00:06:11.820
>> Tak já to prostě spustím
a Ukázat, jak funguje.

00:06:11.820 --> 00:06:14.745
Myslíte, že budeme
vidět nějaký rozdíl?

00:06:14.745 --> 00:06:17.540
>> Nevím. Chci říct
Doufejme, že ne proto, že

00:06:17.540 --> 00:06:20.090
je to tak jednoduché, co si myslím.

00:06:20.090 --> 00:06:22.160
Ale teď se bojím, že

00:06:22.160 --> 00:06:24.200
od doby, kdy registrujeme
a znovu a znovu,

00:06:24.200 --> 00:06:26.750
Pokud se události změní,

00:06:26.750 --> 00:06:28.850
pravděpodobně se dostáváme
v mnoha událostech.

00:06:28.850 --> 00:06:30.635
>> Ano. Pojďme to ověřit.

00:06:30.635 --> 00:06:33.560
Tak jsem se přestěhovala na stránku podrobnosti.

00:06:33.560 --> 00:06:36.185
Teď mi odpojí Wi-Fi.

00:06:36.185 --> 00:06:38.510
>>, Využíváme
Simulátoru iOS.

00:06:38.510 --> 00:06:41.975
Takže ve skutečnosti používá
Internetu počítače.

00:06:41.975 --> 00:06:46.460
>> Ano. Právě jsme dostali tu akci
které jsou připojeni.

00:06:46.460 --> 00:06:51.910
Pojďme se párkrát vrátit
a ještě jednou,

00:06:51.910 --> 00:06:54.630
a jsem zpátky na hlavní stránce.

00:06:54.630 --> 00:06:58.215
Nejsem citlivý v
něco teď,

00:06:58.215 --> 00:07:01.280
a Předpokládám, že moje podrobnosti
Stránka už tam není, že?

00:07:01.280 --> 00:07:01.430
>> Ano.

00:07:01.430 --> 00:07:02.810
>> Obslužná rutina předplatného

00:07:02.810 --> 00:07:04.805
neměla fungovat, protože
Nic jsem neudělala.

00:07:04.805 --> 00:07:07.015
Pojďme zapnout Wi-Fi.

00:07:07.015 --> 00:07:09.510
>> Dobře. Takže jsme vlastně vytvořili

00:07:09.510 --> 00:07:11.910
Toto volání této změny
na druhé stránce.

00:07:11.910 --> 00:07:12.420
>> Druhé stránce.

00:07:12.420 --> 00:07:13.665
>> No, jsem na první stránce.

00:07:13.665 --> 00:07:17.440
>> Ano. Takže neočekáváme
Naše obsluha bude pracovat,

00:07:17.440 --> 00:07:18.645
ale Podívej, co máme.

00:07:18.645 --> 00:07:21.090
Právě jsme dostali čtyři obsluhy
spuštění našeho kódu,

00:07:21.090 --> 00:07:23.600
a mohl by to být jakýkoliv
databáze aktualizace kódu,

00:07:23.600 --> 00:07:25.505
ukládání nastavení, cokoliv.

00:07:25.505 --> 00:07:28.070
Problém je nejen
pomocí správy paměti

00:07:28.070 --> 00:07:30.635
protože to zabere trochu paměti.

00:07:30.635 --> 00:07:34.970
Je to také problém, protože máme
také nějaký kód, který má být proveden.

00:07:34.970 --> 00:07:37.445
>> To znamená
stránku podrobnosti,

00:07:37.445 --> 00:07:39.350
Teď už to nikdy nemůže být
uvolněné odpadky?

00:07:39.350 --> 00:07:42.455
Takže teď mám jen tohle
Stránka podrobností je vždy v paměti.

00:07:42.455 --> 00:07:43.400
>> Bohužel ano.

00:07:43.400 --> 00:07:44.660
>> Oh můj Bože, to je špatné.

00:07:44.660 --> 00:07:47.385
>> To je špatné. Jako vývojář

00:07:47.385 --> 00:07:49.560
ne vždy to vidíme.

00:07:49.560 --> 00:07:54.280
Jako uživatel vidím zhroucení aplikace
jako jednou týdně, cokoliv.

00:07:54.280 --> 00:07:56.675
Jen ho znovu spustím
a nadále jej používat.

00:07:56.675 --> 00:07:58.220
Proto to není ohlášeno,

00:07:58.220 --> 00:08:00.350
nebere to vážně,

00:08:00.350 --> 00:08:03.950
Jedná se však o problém zvlášť v případě, že

00:08:03.950 --> 00:08:08.330
získat obrovský obraz
která ovlivňuje vaši paměť.

00:08:08.330 --> 00:08:10.910
Takže se chystám odkomentovat
Tento řádek kódu,

00:08:10.910 --> 00:08:14.680
který skutečně přidává určité zatížení paměti

00:08:14.680 --> 00:08:19.740
a načítá
obrázku z Internetu.

00:08:19.740 --> 00:08:22.265
Jen si beru náhodný obraz.

00:08:22.265 --> 00:08:24.815
Ukážu ti, že je to opravdu náhodné.

00:08:24.815 --> 00:08:27.035
Podíváme se, co tu máme.

00:08:27.035 --> 00:08:29.510
Vždycky se o to bojím.

00:08:29.510 --> 00:08:32.210
OK. Takže máme ten náhodný obraz,

00:08:32.210 --> 00:08:34.370
a to je to, co jsme
bude načten

00:08:34.370 --> 00:08:37.190
Naše aplikace pokaždé, když jsme
Přejděte na stránku podrobnosti.

00:08:37.190 --> 00:08:37.610
>> Dobře.

00:08:37.610 --> 00:08:40.395
>> Ukažte mi to tady.

00:08:40.395 --> 00:08:42.970
>> Tohle je úplně něco
to, co se vždycky stane, ne?

00:08:42.970 --> 00:08:45.220
Protože přejdete na stránku podrobnosti,

00:08:45.220 --> 00:08:46.740
pravděpodobně načtete nějaké informace,

00:08:46.740 --> 00:08:48.080
pravděpodobně táhne několik
informace od

00:08:48.080 --> 00:08:51.095
databázi na této obrazovce,
a to by mohlo být zlé.

00:08:51.095 --> 00:08:53.930
>> Představte si, že jste
pomocí Instagram App.

00:08:53.930 --> 00:08:55.330
Tam máte stránku podrobnosti.

00:08:55.330 --> 00:08:56.710
Klepnete a budete následovat,

00:08:56.710 --> 00:08:58.435
jít do detailů, vrátit se.

00:08:58.435 --> 00:09:00.720
Jdi zkontrolovat jinou složku
Přejít na podrobnosti,

00:09:00.720 --> 00:09:03.920
zpátky a za týden vaše aplikace
zhroucení a nikdo neví proč.

00:09:03.920 --> 00:09:06.680
To je, když problémy s pamětí
mohla přijít do hry.

00:09:06.680 --> 00:09:09.180
>> Mám tě.

00:09:09.180 --> 00:09:11.855
>> Nebudu vám ukazovat, že
nevrácená paměť je stále k dispozici

00:09:11.855 --> 00:09:14.650
protože chci zobrazit
Vy profilátor,

00:09:14.650 --> 00:09:16.375
Jak lze tyto problémy identifikovat.

00:09:16.375 --> 00:09:17.800
Chcete-li tyto problémy identifikovat,

00:09:17.800 --> 00:09:19.990
máte několik nástrojů.

00:09:19.990 --> 00:09:23.350
Především to jsou nativní nástroje,
iOs poskytuje nástroje,

00:09:23.350 --> 00:09:25.520
a druhý je spravovaný nástroj,

00:09:25.520 --> 00:09:27.005
což je Xamarin Profiler.

00:09:27.005 --> 00:09:27.990
>> Mám tě.

00:09:27.990 --> 00:09:29.520
>> Proč si myslíte, že potřebujeme obojí?

00:09:29.520 --> 00:09:32.985
>> No, dělají různé věci.

00:09:32.985 --> 00:09:36.090
>> Ano. Skutečně
z důvodu této bitové kopie.

00:09:36.090 --> 00:09:38.025
Pamatujte. Mluvil jsem o tom.

00:09:38.025 --> 00:09:41.565
Ve skutečnosti mohou vědět
o své vlastní části.

00:09:41.565 --> 00:09:44.190
Takže Xamarin Profiler nic neví

00:09:44.190 --> 00:09:47.100
o nativním režimu paměti
objekty tam vytvořené,

00:09:47.100 --> 00:09:50.010
a nativní nástroje nejsou
vědět o spravované paměti.

00:09:50.010 --> 00:09:52.685
Jen říká, že je tu nějaký
kus vytvořeného objektu.

00:09:52.685 --> 00:09:54.710
Když mono vytvoří objekt,

00:09:54.710 --> 00:09:57.275
Pořád to tak nějak svazovat
na nativní objekty.

00:09:57.275 --> 00:09:59.210
Takže ti, které budeš moci vidět,

00:09:59.210 --> 00:10:00.500
ale zbytek nebude.

00:10:00.500 --> 00:10:01.220
>> Dobře. Cool.

00:10:01.220 --> 00:10:02.945
>> Takže se podíváme na Xamarin Profiler.

00:10:02.945 --> 00:10:06.550
Je snazší pochopit
na začátku

00:10:06.550 --> 00:10:10.955
a také vám ukáže pěknou
obor názvů a podobné pojmenování.

00:10:10.955 --> 00:10:12.815
Takže můžete identifikovat svůj objekt.

00:10:12.815 --> 00:10:16.715
Existuje malé tlačítko "Run"
a "spustit profil" zde.

00:10:16.715 --> 00:10:20.050
Potřebujete rozlehlou síť.
licenci.

00:10:20.050 --> 00:10:23.870
Ale je to velmi pohodlné a
Povzbuzuje tě to.

00:10:23.870 --> 00:10:25.190
Když to uděláš,

00:10:25.190 --> 00:10:26.825
ve skutečnosti je vytvořena aplikace s

00:10:26.825 --> 00:10:31.130
některá další metadata a
kód vložený do vaší aplikace.

00:10:31.130 --> 00:10:33.580
Takže jsme viděli a
sledování objektů.

00:10:33.580 --> 00:10:36.140
>> Teď jedna věc, zatímco tohle
je vytváření a nasazování je,

00:10:36.140 --> 00:10:38.030
běžíme na
simulátor, který znamená

00:10:38.030 --> 00:10:40.520
má plné koňmoci.

00:10:40.520 --> 00:10:45.320
Je to v pořádku, že to dělám
a profilovat jej v zařízení,

00:10:45.320 --> 00:10:49.150
nebo je lepší udělat to na
například fyzický iPhone?

00:10:49.150 --> 00:10:50.570
>> To je dobrá otázka, protože jsi

00:10:50.570 --> 00:10:52.340
může provádět různé druhy profilování.

00:10:52.340 --> 00:10:52.940
>> Zajímavé.

00:10:52.940 --> 00:10:54.230
>> Pokud profilujete procesor,

00:10:54.230 --> 00:10:56.480
není to dobrý nápad
na simulátoru

00:10:56.480 --> 00:10:58.820
protože nemáte
plný výkon zařízení.

00:10:58.820 --> 00:11:01.340
Ale jestli si děláš paměť
profilátor a přidělení,

00:11:01.340 --> 00:11:04.355
budete mít stejné problémy
na simulátoru a na přístroji.

00:11:04.355 --> 00:11:04.730
>> Perfektní.

00:11:04.730 --> 00:11:10.300
>> To rád dělám na přenosném počítači
protože se spouští rychleji.

00:11:10.300 --> 00:11:13.010
Nepřeloží kód

00:11:13.010 --> 00:11:16.085
do nativních instrukcí a pouze
simuluje a spouští okamžitě.

00:11:16.085 --> 00:11:18.470
Takže, kdykoli budete profilovat paměť,

00:11:18.470 --> 00:11:20.180
Pokud spouštíte aplikace tolikrát,

00:11:20.180 --> 00:11:23.045
Takže se ti to bude líbit.

00:11:23.045 --> 00:11:25.085
Nech mě udělat ten samý test.

00:11:25.085 --> 00:11:27.980
Takže jsem jednou otevřel stránku podrobnosti,

00:11:27.980 --> 00:11:29.840
a vidíte tenhle malý vrchol.

00:11:29.840 --> 00:11:33.590
To znamená, že jsme zvýšili
využití paměti.

00:11:33.590 --> 00:11:35.915
Ale ty nevidíš
zvýšení paměti.

00:11:35.915 --> 00:11:38.510
Pořád je to, jako by největší předmět byl

00:11:38.510 --> 00:11:40.730
strom systémů a někde tady.

00:11:40.730 --> 00:11:43.155
Nech mě to ještě párkrát udělat.

00:11:43.155 --> 00:11:45.815
Znovu to zvyším.

00:11:45.815 --> 00:11:47.610
Uvidíte tu kůl,

00:11:47.610 --> 00:11:49.735
ale tady nevidíš žádný hřeby.

00:11:49.735 --> 00:11:53.330
To znamená, že když přidělíme
v něčem v nativní paměti,

00:11:53.330 --> 00:11:56.220
neodráží
ve spravovaném světě,

00:11:56.220 --> 00:11:59.419
Ale vidíme, že celková paměť je
pěstování a nenavrácení,

00:11:59.419 --> 00:12:00.720
což je nejdůležitější věc.

00:12:00.720 --> 00:12:01.455
>> Vidím.

00:12:01.455 --> 00:12:04.015
>> Vrátíme se s tímhle snímkem.

00:12:04.015 --> 00:12:05.710
Snímek paměti je skutečně spuštěn

00:12:05.710 --> 00:12:07.875
uvolňování paměti
na spravovaných stránkách.

00:12:07.875 --> 00:12:10.195
Takže ten snímek děláme.
Udělám ještě jednu.

00:12:10.195 --> 00:12:11.755
Vysvětlím ti to později,

00:12:11.755 --> 00:12:14.500
se vypořádat s finalizací.

00:12:14.500 --> 00:12:17.475
Ale v podstatě, teď je to čistá paměť.

00:12:17.475 --> 00:12:19.605
Budeme se muset ujistit, že
Náš systém uvolňování paměti

00:12:19.605 --> 00:12:22.270
již spuštěn a odalokoval
všechen získaný objekt.

00:12:22.270 --> 00:12:23.920
Stále vidíme vzpomínky.

00:12:23.920 --> 00:12:25.845
A tak to pořád ještě šlo dolů.

00:12:25.845 --> 00:12:28.755
Abych věděl, co se tu děje,

00:12:28.755 --> 00:12:32.005
prostě půjdeme sem a
použijte tlačítko filtru.

00:12:32.005 --> 00:12:35.265
Snažíme se identifikovat
pouze objekty R,

00:12:35.265 --> 00:12:38.110
a chci také vidět na
živé předměty.

00:12:38.110 --> 00:12:40.980
Tak jsem narazil na "Apply"
Button a voila,

00:12:40.980 --> 00:12:43.575
vidíme dva řadiče podrobností
zavěšené v paměti,

00:12:43.575 --> 00:12:47.160
i když nemám
Podrobnosti.

00:12:47.160 --> 00:12:48.570
>> Super ukázka, tak jsi řekl,

00:12:48.570 --> 00:12:50.289
Najít vše na mém místě,

00:12:50.289 --> 00:12:51.610
filtrovat.

00:12:51.610 --> 00:12:54.820
Doslova to, co vidíme
je řadič zobrazení podrobností 2.

00:12:54.820 --> 00:12:55.225
>> Ano.

00:12:55.225 --> 00:12:56.650
>> Ale mělo by to být pryč.

00:12:56.650 --> 00:13:00.015
>> Začnu s největším
objektů, které máte na těchto stránkách.

00:13:00.015 --> 00:13:00.280
>> Ano.

00:13:00.280 --> 00:13:02.865
>> To platí i pro androida.

00:13:02.865 --> 00:13:04.030
Jen hledáte aktivity,

00:13:04.030 --> 00:13:05.395
Zobrazit modely nebo co,

00:13:05.395 --> 00:13:07.875
protože jakmile máte zobrazení
model visící tam,

00:13:07.875 --> 00:13:11.320
začne propojovat všechny
ostatních objektů.

00:13:11.320 --> 00:13:13.380
Všechny služby, všechny vazby,

00:13:13.380 --> 00:13:16.605
všechny UIs a budete
mít hodně paměti.

00:13:16.605 --> 00:13:17.500
>> Mám to.

00:13:17.500 --> 00:13:19.465
>> Ukažte mi, že je to pravda.

00:13:19.465 --> 00:13:23.260
Otevřu ho ještě jednou
čas, Zasáhni "snapshot".

00:13:23.260 --> 00:13:25.455
Tady vidíme tři případy.

00:13:25.455 --> 00:13:28.569
Vracím se zpátky a trefím "snímek",

00:13:28.569 --> 00:13:30.030
a zůstane v paměti.

00:13:30.030 --> 00:13:30.660
>> Mám tě.

00:13:30.660 --> 00:13:32.500
>> Takže tento problém s pamětí napravím.

00:13:32.500 --> 00:13:33.700
>> Jsem připravená.

00:13:33.700 --> 00:13:36.470
>> Jak to můžeš spravit?

00:13:41.220 --> 00:13:43.525
Toto je stránka s podrobnostmi,

00:13:43.525 --> 00:13:45.460
Takže musíme odhlásit odběr
v některých případech.

00:13:45.460 --> 00:13:49.325
>> Mám tě. Skutečný problém je zde
jsem přihlášen k odběru nějaké události.

00:13:49.325 --> 00:13:49.970
>> Ano.

00:13:49.970 --> 00:13:52.135
>> Pak bychom se měli odhlásit, ne?

00:13:52.135 --> 00:13:54.550
>> To je správně. Tento
je dobrý trénink.

00:13:54.550 --> 00:13:56.370
Kdykoli uvidíte toto plus stejné,

00:13:56.370 --> 00:13:59.490
pouze Hledat, pokud
je zde minus rovná se,

00:13:59.490 --> 00:14:01.980
Pokud ne,
měla zavést.

00:14:01.980 --> 00:14:02.595
>> Mám to.

00:14:02.595 --> 00:14:05.020
>> Toto je první indikace
že máte nevrácenou paměť.

00:14:05.020 --> 00:14:05.340
>> Mám to.

00:14:05.340 --> 00:14:10.460
>> Jedinou výjimkou je, že
přihlásíte se k odběru hlavní stránky,

00:14:10.460 --> 00:14:12.285
jako naše hlavní stránka,

00:14:12.285 --> 00:14:14.725
a jste si jisti, že tato stránka

00:14:14.725 --> 00:14:18.010
nebude moci přejít
v brzké době pryč.

00:14:18.010 --> 00:14:20.115
>> Možná to máš v
úrovně delegáta aplikace.

00:14:20.115 --> 00:14:21.530
Jsi jako, vlastně
Chcete, aby to bylo

00:14:21.530 --> 00:14:23.290
globální událost pro všechny časy.

00:14:23.290 --> 00:14:25.845
Ale také možná když vaše aplikace
přejde na pozadí,

00:14:25.845 --> 00:14:27.295
měli byste také odhlásit odběr.

00:14:27.295 --> 00:14:28.345
>> To je pravda.

00:14:28.345 --> 00:14:28.675
>> Ano.

00:14:28.675 --> 00:14:29.700
>> Nelze provést.

00:14:29.700 --> 00:14:31.750
>> Takže teď říkáš
Když se objeví,

00:14:31.750 --> 00:14:33.855
bude se přihlašovat a zmizí

00:14:33.855 --> 00:14:35.935
Odhlásit odběr a potom
Sejměte ji nahoře.

00:14:35.935 --> 00:14:37.990
>> Ano, odstranil jsem z mraku,

00:14:37.990 --> 00:14:39.710
protože chceme
ho spustit pokaždé, když jsme

00:14:39.710 --> 00:14:42.040
objevit a pokaždé, když zmizíme.

00:14:42.040 --> 00:14:43.850
Plus se rovná odběru,

00:14:43.850 --> 00:14:45.640
minus se rovná zrušení odběru.

00:14:45.640 --> 00:14:48.735
Nic složitého, jen chci

00:14:48.735 --> 00:14:52.045
Ujistěte se, že nepotřebujeme žádné
přístrojů, jakmile to projdeme.

00:14:52.045 --> 00:14:52.720
>> Cool.

00:14:52.720 --> 00:14:55.110
>> Takže dělám to samý,

00:14:55.110 --> 00:14:59.490
jít na podrobnosti,
dosvědčující, že je to pravda.

00:14:59.490 --> 00:15:02.980
Pořizování snímku,
filtrovat do mých událostí.

00:15:02.980 --> 00:15:05.300
Promiň. Právě to klaplo.

00:15:08.700 --> 00:15:12.170
Podíváme se na živé předměty.

00:15:12.420 --> 00:15:15.345
Měli bychom vidět podrobnosti
protože momentálně jsme na

00:15:15.345 --> 00:15:17.475
stránce podrobností. Jdeme zpátky.

00:15:17.475 --> 00:15:18.990
Narazili jsme na "snímek"

00:15:18.990 --> 00:15:20.880
a co tady očekáváme?

00:15:20.880 --> 00:15:23.715
Zaprvé, uvolnění paměti ve skutečnosti

00:15:23.715 --> 00:15:26.065
umístit tyto objekty do
finalizační Cue,

00:15:26.065 --> 00:15:27.625
ale druhá by měla mít Cue 1,

00:15:27.625 --> 00:15:30.340
nebo pravděpodobně stále ta samá.

00:15:30.340 --> 00:15:31.570
>> Teď už je pryč.

00:15:31.570 --> 00:15:33.910
>> Ano. Tak mě nech mluvit o

00:15:33.910 --> 00:15:36.940
finalizace Cue v
Zadruhé, ale prozatím

00:15:36.940 --> 00:15:40.395
myšlenka je, že jsme
ztratili naše podrobné zobrazení,

00:15:40.395 --> 00:15:43.135
a naše využití paměti se blíží.

00:15:43.135 --> 00:15:43.770
>> Krásná.

00:15:43.770 --> 00:15:46.150
>> Tak jsme opravujeme únik paměti.

00:15:46.150 --> 00:15:49.420
>> Ano. Odebírané
Události. Zrušení odběru událostí

00:15:49.420 --> 00:15:51.630
>> Základní pravidlo palce.

00:15:51.630 --> 00:15:54.915
>> To je moc legrační
protože jeden z nich způsobuje dvě záležitosti.

00:15:54.915 --> 00:15:56.800
Viděli jsme, že jste ji držel naživu.

00:15:56.800 --> 00:15:58.750
protože tyto události stále jdou.

00:15:58.750 --> 00:16:00.715
Takže teď střílejí
je vícekrát,

00:16:00.715 --> 00:16:04.290
ale také vše na této stránce
bude ponechána v paměti.

00:16:04.290 --> 00:16:06.685
>> To je pravda. Proto
Přidali jsme těžký obraz,

00:16:06.685 --> 00:16:08.205
a pořád je v paměti.

00:16:08.205 --> 00:16:08.830
>> Mám to.

00:16:08.830 --> 00:16:10.570
>> Dovol, abych ti ukázal nástroje.

00:16:10.570 --> 00:16:13.390
Takže vám představím
nevrácené paměti.

00:16:13.390 --> 00:16:13.800
>> Jistě.

00:16:13.800 --> 00:16:15.985
>> Pouze odebrání odběru události.

00:16:15.985 --> 00:16:18.435
Chystám se nasadit na svůj simulátor,

00:16:18.435 --> 00:16:21.330
a nástroje fungují poměrně snadno.

00:16:21.330 --> 00:16:23.355
Stačí vybrat cíl z

00:16:23.355 --> 00:16:25.930
simulátor a
App, a to je vše.

00:16:25.930 --> 00:16:28.435
To je vše, co musíte začít
profileru nástrojů.

00:16:28.435 --> 00:16:30.175
I když je to Xamarin App,

00:16:30.175 --> 00:16:32.150
můžete začít správně
z nástrojů,

00:16:32.150 --> 00:16:33.615
o Xamarin nic neví.

00:16:33.615 --> 00:16:35.310
>> Odkud pocházejí nástroje?

00:16:35.310 --> 00:16:38.709
>> Apple. Je to jablko
je dodáván s Xcode,

00:16:38.709 --> 00:16:41.950
a má spoustu
uvnitř nástrojů.

00:16:41.950 --> 00:16:43.450
>> Takže je to postaveno v
protože již máte

00:16:43.450 --> 00:16:45.415
Xcode nainstalován? Takže
to má každý?

00:16:45.415 --> 00:16:46.015
>> Je to zadarmo.

00:16:46.015 --> 00:16:48.925
>> Je to zadarmo. Cool. Takže kdokoli
to dnes můžeme použít?

00:16:48.925 --> 00:16:53.880
>> Ano. Můžete skutečně
Zobrazit tyto činnosti,

00:16:53.880 --> 00:16:57.920
i když jsou vytvořeny spravovanými
svět jako podrobnosti aktivity,

00:16:57.920 --> 00:17:00.525
je stále reprezentována
nativním objektem.

00:17:00.525 --> 00:17:00.930
>> Mám to.

00:17:00.930 --> 00:17:02.855
>> Takže se podíváme po tom předmětu.

00:17:02.855 --> 00:17:07.240
Říkáme mu ovladač zobrazení podrobností.

00:17:07.240 --> 00:17:09.595
Dovolte mi jich pár vytvořit.

00:17:09.595 --> 00:17:11.030
>> To je vlastně
fakt super, protože

00:17:11.030 --> 00:17:12.240
Nikdy jsem nástroje nepoužíval,

00:17:12.240 --> 00:17:15.295
nikomu to neříkej, roky.

00:17:15.295 --> 00:17:18.440
Nemyslím, že každý dává
mi detail. Takže existuje?

00:17:18.440 --> 00:17:20.070
>> Ano, existuje.

00:17:20.070 --> 00:17:22.335
>> To dává smysl
protože Xamarin je nativní,

00:17:22.335 --> 00:17:23.770
tak vytvoří nativní objekt.

00:17:23.770 --> 00:17:26.380
>> Ano. Nemusíte dělat

00:17:26.380 --> 00:17:27.885
zde snímek paměti

00:17:27.885 --> 00:17:29.975
protože nemáme
úklid.

00:17:29.975 --> 00:17:33.780
IOS používá hierarchii, která je
Automatický referenční čítač.

00:17:33.780 --> 00:17:35.605
V zásadě, kdykoli
vytvoříte objekt,

00:17:35.605 --> 00:17:37.065
zvýší hodnotu čítače,

00:17:37.065 --> 00:17:39.550
kdykoli jej nepoužíváte nebo

00:17:39.550 --> 00:17:42.505
zmizí z rozsahu
použití, sníží se počítadlo.

00:17:42.505 --> 00:17:43.845
Jakmile je čítač nulový,

00:17:43.845 --> 00:17:46.495
objekt je odpad a
může být shromážděna.

00:17:46.495 --> 00:17:48.075
Takže je docela snadné začít

00:17:48.075 --> 00:17:51.735
Nástroje s aplikací
pouze klepnutím na toto tlačítko.

00:17:51.735 --> 00:17:53.505
Spustí App,

00:17:53.505 --> 00:17:55.860
Zde se zobrazí využití paměti.

00:17:55.860 --> 00:17:57.690
Otevřme stránku podrobnosti.

00:17:57.690 --> 00:18:00.425
>> Mám tě. Nástroje
pochází z Apple?

00:18:00.425 --> 00:18:02.040
>> Nástroje pocházejí z Apple.

00:18:02.040 --> 00:18:03.350
Je to bezplatný nástroj od Apple.

00:18:03.350 --> 00:18:04.490
Můžeš to použít hned teď.

00:18:04.490 --> 00:18:05.390
>> Cool.

00:18:05.390 --> 00:18:06.970
>> Víte, že máme také

00:18:06.970 --> 00:18:10.140
Toto paměťové stopy vpravo
Po otevření stránky podrobnosti.

00:18:10.140 --> 00:18:12.120
Otevřme to ještě jednou.

00:18:12.120 --> 00:18:15.140
>> To je velmi podobné
k Xamarin profileru,

00:18:15.140 --> 00:18:16.870
ale tohle nám bude ukazovat

00:18:16.870 --> 00:18:19.240
nativní zásobník pro všechny
záměry a účel.

00:18:19.240 --> 00:18:21.500
>> To je pravda. Bohužel

00:18:21.500 --> 00:18:24.090
neví nic o
Xamarin a řízený svět,

00:18:24.090 --> 00:18:27.025
takže nebudete moci vidět
spravovaný objekt, který vytvořil.

00:18:27.025 --> 00:18:28.990
Takže Vidíš ten bodec,

00:18:28.990 --> 00:18:30.850
a vidíte, že to nepřejde.

00:18:30.850 --> 00:18:33.350
Dovolte, abych to udělal potřetí,

00:18:33.350 --> 00:18:35.145
a pouze zobrazit objekty.

00:18:35.145 --> 00:18:38.455
Tak se na to podíváme. Existuje
malé tlačítko filtru.

00:18:38.455 --> 00:18:43.170
Máme tu všechny příděly,

00:18:43.170 --> 00:18:45.165
a zasáhli "detaily".

00:18:45.165 --> 00:18:45.820
>> Dobře.

00:18:45.820 --> 00:18:47.555
>> Toto jsou tři stránky přímo tady,

00:18:47.555 --> 00:18:48.660
Všichni jsou v paměti,

00:18:48.660 --> 00:18:50.650
a přidělí paměť.

00:18:50.650 --> 00:18:54.070
Nebudu ukazovat, jak se navrátit
to proto, že je to ta samá oprava,

00:18:54.070 --> 00:18:57.020
jen se odhlašujeme,
spravovaný svět se neodhlásí

00:18:57.020 --> 00:19:00.120
z objektu. Objekt
považovány za odpad.

00:19:00.120 --> 00:19:04.660
Pak náš systém uvolňování paměti
shromažďuje tyto informace,

00:19:04.660 --> 00:19:06.460
pak nativní může shromažďovat
protože nic

00:19:06.460 --> 00:19:08.490
ze správy světa
to už drží.

00:19:08.490 --> 00:19:10.780
>> Dává smysl. Velmi
stejnou opravu,

00:19:10.780 --> 00:19:12.255
ale jiný způsob, jak to zjistit.

00:19:12.255 --> 00:19:15.045
>> To je pravda. Takže tohle je

00:19:15.045 --> 00:19:19.345
o rozdílech mezi
spravovaného a nativního světa.

00:19:19.345 --> 00:19:22.120
Mé další příklady budou
být většinou spravovány

00:19:22.120 --> 00:19:25.320
světě, protože můžete
zavést jakýkoli problém,

00:19:25.320 --> 00:19:26.905
a to nesouvisí s Xamarin.

00:19:26.905 --> 00:19:29.570
Jak jsi řekl, mohlo by to být
přihlášení ke statické události

00:19:29.570 --> 00:19:32.745
mohlo by to zavést
vydat i kdekoli.

00:19:32.745 --> 00:19:35.410
Takže další věc je

00:19:35.410 --> 00:19:38.210
o odběru a
bez předplatného.

00:19:38.210 --> 00:19:39.315
V tomto případě však

00:19:39.315 --> 00:19:42.820
jsme vlastně
implicitně se přihlásíte,

00:19:42.820 --> 00:19:44.480
nebudeme používat Plus rovná se.

00:19:44.480 --> 00:19:46.015
Takže je těžší ho najít.

00:19:46.015 --> 00:19:48.710
V tomto případě spustíme tento
Centrum oznámení se pokouší

00:19:48.710 --> 00:19:51.795
zjistit, kdy je naše aplikace otočena.

00:19:51.795 --> 00:19:53.695
Přidáme tohoto pozorovatele.

00:19:53.695 --> 00:19:57.525
Toto výchozí centrum je ojedinělé.

00:19:57.525 --> 00:19:59.700
Říkám to, chci se

00:19:59.700 --> 00:20:02.595
jakékoli informace, kdykoli
orientace se změnila,

00:20:02.595 --> 00:20:04.140
a tady je moje obslužná rutina.

00:20:04.140 --> 00:20:04.650
>> Mám to.

00:20:04.650 --> 00:20:06.690
>> Obslužná rutina sama,
je to docela snadný.

00:20:06.690 --> 00:20:08.125
Nic tam neděláme,

00:20:08.125 --> 00:20:11.665
jen to vytiskneme na ladění.

00:20:11.665 --> 00:20:12.465
>> Mám to.

00:20:12.465 --> 00:20:15.525
>> Dovolte mi odstranit
připojení, protože

00:20:15.525 --> 00:20:18.630
chceme zavést jiné
druhy potíží s pamětí.

00:20:18.630 --> 00:20:21.525
Komentujeme také
obrázek, protože nepotřebujeme

00:20:21.525 --> 00:20:24.430
zobrazení paměti
stopu, je tam.

00:20:24.430 --> 00:20:28.390
Budeme experimentovat jen s
Řadiče a zobrazení uživatelského rozhraní.

00:20:28.390 --> 00:20:30.650
>> Velmi hustý. Takže tohle
je velmi podobná,

00:20:30.650 --> 00:20:32.870
ale tento vzor
může se přihlásit k odběru,

00:20:32.870 --> 00:20:34.605
Možná dokonce i v akci.

00:20:34.605 --> 00:20:38.340
Nebo v tomto případě, co dělá
říká se tady vaše zpětné volání.

00:20:38.340 --> 00:20:40.010
Delegáti jsou velmi podobní,

00:20:40.010 --> 00:20:41.115
Myslím na tyhle vzory.

00:20:41.115 --> 00:20:42.480
Takže je to jen něco
Já jsem taky na to jako dřív.

00:20:42.480 --> 00:20:45.590
>> To je pravda. To bylo

00:20:45.590 --> 00:20:47.864
jejich hlavní myšlenkou, protože
Pokud se přihlásíte k odběru,

00:20:47.864 --> 00:20:51.405
Míváš odkaz na
také řadič zobrazení uživatelského rozhraní.

00:20:51.405 --> 00:20:53.425
Tohle je jen jiná
způsob předání odkazu.

00:20:53.425 --> 00:20:55.260
Někdy to není tak očividné.

00:20:55.260 --> 00:20:57.955
Takže máme předplatné,
tady běží.

00:20:57.955 --> 00:20:59.305
Běží jen jednou.

00:20:59.305 --> 00:21:01.780
Zavřete to a otevřte to znovu.

00:21:01.780 --> 00:21:03.525
Teď máme dvojí kliknutí.

00:21:03.525 --> 00:21:05.230
Dovolte mi, abych vám to ukázal.

00:21:05.230 --> 00:21:07.240
Jednou se otočím, dvě,

00:21:07.240 --> 00:21:11.655
což znamená, že máme některé zobrazení uživatelského rozhraní
Řadič visí v paměti,

00:21:11.655 --> 00:21:13.535
při zpracování první z nich.

00:21:13.535 --> 00:21:13.980
>> Mám to.

00:21:13.980 --> 00:21:15.430
>> Může to být problém, pokud máte

00:21:15.430 --> 00:21:19.660
Některé logiky aktualizace databáze
nebo požadavku HTTP přesčas.

00:21:19.660 --> 00:21:21.340
Jako v den použití,

00:21:21.340 --> 00:21:24.810
vaše aplikace není zabita, vy
deaktivovat, znovu aktivovat.

00:21:24.810 --> 00:21:26.740
Bude mít všechny tyto
Zobrazení je stále v paměti,

00:21:26.740 --> 00:21:28.265
a za týden se může zřítí.

00:21:28.265 --> 00:21:28.785
>> Ano.

00:21:28.785 --> 00:21:30.105
>> Jak to napravit?

00:21:30.105 --> 00:21:31.550
Je to snadný.

00:21:31.550 --> 00:21:34.145
>> Předpokládám, že jste se odhlásit?

00:21:34.145 --> 00:21:35.835
>> To je pravda. To je těžší

00:21:35.835 --> 00:21:38.685
Odhlásit odběr, protože jste
nemá plus stejné.

00:21:38.685 --> 00:21:42.010
Ukažte mi také, co jste
vlastně sem poslali.

00:21:42.010 --> 00:21:43.365
Když se přihlásíte k odběru,

00:21:43.365 --> 00:21:46.395
procházíte názvem metody.

00:21:46.395 --> 00:21:48.215
Vlastně Míváš nějakou akci,

00:21:48.215 --> 00:21:51.745
a kompilátor provádí
Skvělá práce, že to schováváš,

00:21:51.745 --> 00:21:54.150
a usnadňování našich životů.

00:21:54.150 --> 00:21:55.945
>> Compiler je velmi milý.

00:21:55.945 --> 00:21:57.255
>> Velmi milé.

00:21:57.255 --> 00:22:00.415
Proto chceme být vývojáři.

00:22:00.415 --> 00:22:04.360
Takže si vlastně žádá
akce s NSNotification.

00:22:04.360 --> 00:22:07.840
Takže tady podepisuji NSNotification,

00:22:07.840 --> 00:22:13.365
a potom použít tento zápis,
vložení tohoto objektu.

00:22:13.365 --> 00:22:16.560
Místo názvu metody

00:22:16.560 --> 00:22:19.225
vlastně míváme
akce a objekt,

00:22:19.225 --> 00:22:20.960
který obsahuje odkaz na

00:22:20.960 --> 00:22:23.610
Tato metadata o tom, jak
k volání metody.

00:22:23.610 --> 00:22:26.555
Takže neprojdeme touto metodou,
je to jen odkaz.

00:22:26.555 --> 00:22:30.060
V našem případě je nejdůležitější
část při předávání tohoto odkazu,

00:22:30.060 --> 00:22:32.155
který je řadičem UIV,

00:22:32.155 --> 00:22:34.170
a proto se to drží v paměti.

00:22:34.170 --> 00:22:35.260
>> Mám to.

00:22:35.260 --> 00:22:35.865
>> Dobře.

00:22:35.865 --> 00:22:36.670
>> Dává smysl. Ano.

00:22:36.670 --> 00:22:38.595
>> Nebudu ukazovat podrobnosti

00:22:38.595 --> 00:22:40.390
protože paměť
únik je stále ještě

00:22:40.390 --> 00:22:43.975
protože jsme viděli tyto
něco na záchranu času.

00:22:43.975 --> 00:22:45.500
Chci se soustředit na

00:22:45.500 --> 00:22:48.830
nejhorší scénář, který
byste si měli být vědomi.

00:22:48.830 --> 00:22:54.250
Když se rodný svět neumístí
dobře se spravovaným světem.

00:22:54.250 --> 00:22:56.280
>> Mám tě. Při
dva světy se střetnou.

00:22:56.280 --> 00:23:00.265
>> To je pravda, protože kdykoliv
byl vytvořen spravovaný objekt,

00:23:00.265 --> 00:23:02.155
a je vytvořen nativní objekt,

00:23:02.155 --> 00:23:05.690
a snaží se
navrátit nativní objekty,

00:23:05.690 --> 00:23:07.495
Náš řízený svět si myslí,

00:23:07.495 --> 00:23:09.330
S tímto objektem ještě nejsem hotov.

00:23:09.330 --> 00:23:11.270
Prosím, vydržte,

00:23:11.270 --> 00:23:13.765
objekt shromáždit, protože
Pořád s tím pracuju.

00:23:13.765 --> 00:23:14.525
>> Mám tě.

00:23:14.525 --> 00:23:15.805
>> Mohlo by to být naopak,

00:23:15.805 --> 00:23:19.130
Když se rodný svět
může vytvořit objekt,

00:23:19.130 --> 00:23:20.265
a nyní si jeden řízený svět myslí,

00:23:20.265 --> 00:23:22.450
ještě to není hotové, stále
, tak si to nechte.

00:23:22.450 --> 00:23:25.015
I když nemáte jiné
odkazy na tento objekt,

00:23:25.015 --> 00:23:29.015
může to vydržet, mohlo by to
Neuchovávejte ho jako smetí.

00:23:29.015 --> 00:23:29.820
>> Mám tě.

00:23:29.820 --> 00:23:31.460
>> Mohl bych to vysvětlit

00:23:31.460 --> 00:23:34.640
Tento malý obrázek
nesmrtelných předmětů.

00:23:34.640 --> 00:23:37.230
Takže nevytvářejte nesmrtelné
Objekty. To je špatné.

00:23:37.230 --> 00:23:38.435
>> To zní skvěle.

00:23:38.435 --> 00:23:39.963
>> Ano.

00:23:39.963 --> 00:23:43.355
To se stává, když
mít tyto dva světy.

00:23:43.355 --> 00:23:46.925
Nativně, vidíte vpravo
nativní řadič zobrazení a zobrazení,

00:23:46.925 --> 00:23:49.640
a zleva máte

00:23:49.640 --> 00:23:52.580
spravovaný svět C Sharp, který je
Zobrazit řadiče a zobrazení.

00:23:52.580 --> 00:23:55.640
Kdykoli nevíte, co je
děje v rodném světě,

00:23:55.640 --> 00:23:58.070
nelze shromažďovat
to z tohoto světa.

00:23:58.070 --> 00:24:00.905
Ukážu vám jeden příklad
Jak to můžete udělat.

00:24:00.905 --> 00:24:03.275
Takže v mém příkladu

00:24:03.275 --> 00:24:07.235
Chci zde přidat malý
malé tlačítko "Save",

00:24:07.235 --> 00:24:11.375
a chcete pouze zavřít
Zobrazit, jakmile na to uživatel narazí.

00:24:11.375 --> 00:24:13.925
Předpokládejme, že
Tlačítko "Save" také provede

00:24:13.925 --> 00:24:17.330
některé databáze logiky ukládání
nebo HTTP volá cokoliv,

00:24:17.330 --> 00:24:19.055
jen se nevrátí

00:24:19.055 --> 00:24:22.145
a skutečně provádí
nějaké další akce.

00:24:22.145 --> 00:24:22.775
>> Dobře.

00:24:22.775 --> 00:24:24.980
>> Jako podrobnosti o tomto tlačítku

00:24:24.980 --> 00:24:26.300
Pošleme do obsluhy.

00:24:26.300 --> 00:24:31.205
Tato obslužná rutina říká, že
ukončete tento řadič.

00:24:31.205 --> 00:24:33.395
>> Mi připadá naprosto legitimní.

00:24:33.395 --> 00:24:35.255
>> Ano. Představíme
nevrácené paměti.

00:24:35.255 --> 00:24:36.230
>> Dobře.

00:24:36.230 --> 00:24:42.515
>> Jsi špatná. Bude to bohužel
a je to běžná struktura.

00:24:42.515 --> 00:24:45.005
My nemáme žádné
statickou událost, jako je tato.

00:24:45.005 --> 00:24:47.195
Nemáme žádné
jeden tón jako tady.

00:24:47.195 --> 00:24:49.025
Jen tu máme toto tlačítko,

00:24:49.025 --> 00:24:51.650
Toto je pouze místní položka.

00:24:51.650 --> 00:24:54.260
Okay Jamesi, teď jsme
vytvořili tlačítko a

00:24:54.260 --> 00:24:56.735
Chceme jej přidat do
našem navigačním zobrazení.

00:24:56.735 --> 00:25:00.440
Tak jsme to řekli skrz
Položka navigace také nepoužívá

00:25:00.440 --> 00:25:05.225
všechny statické odkazy nic
takhle a tak.

00:25:05.225 --> 00:25:08.015
Teď máme podtlačítko
a začneme s profilerem.

00:25:08.015 --> 00:25:09.890
>> Ano a znovu,
podobný vzor.

00:25:09.890 --> 00:25:11.285
Vytvořím tlačítko

00:25:11.285 --> 00:25:15.800
Přidat tlačítko, a potom jsem
Řadič zobrazení vypadá normálně.

00:25:15.800 --> 00:25:18.185
>> Mít delegáta, který nepoužívá

00:25:18.185 --> 00:25:20.540
všechny externí nebo statické odkazy

00:25:20.540 --> 00:25:23.225
a nepředá žádný odkaz
od našeho kontrolora.

00:25:23.225 --> 00:25:23.750
>> Mám tě.

00:25:23.750 --> 00:25:27.090
>> By měla fungovat dobře,
Právo? Tak se podívejme.

00:25:27.280 --> 00:25:32.780
Takže Profiler zobrazí objekty

00:25:32.780 --> 00:25:34.760
vytvořen na samém začátku a já jsem

00:25:34.760 --> 00:25:37.790
zahájení sledování
je na samém počátku.

00:25:37.790 --> 00:25:39.530
Takže mám skryté snímky správně

00:25:39.530 --> 00:25:42.455
nyní a filtrování pouze na mé objekty.

00:25:42.455 --> 00:25:45.380
Opět je velmi běžný
vzorek k řešení potíží

00:25:45.380 --> 00:25:48.800
paměťové problémy jen pro
Zobrazit pouze mé objekty.

00:25:48.800 --> 00:25:52.235
Tak já tam jednou odejdu.
Tohle je moje tlačítko.

00:25:52.235 --> 00:25:55.565
Vidíte, tohle je nový ovládací prvek
dobře naši žádost.

00:25:55.565 --> 00:25:56.870
Máme to v paměti,

00:25:56.870 --> 00:25:58.745
což je pravda, to očekáváme.

00:25:58.745 --> 00:26:03.410
Vrátíme se, zasáhli jeden
více času a ještě jednou.

00:26:03.410 --> 00:26:04.430
>> Ještě jednou, protože to vím.

00:26:04.430 --> 00:26:05.195
>> Ještě jednou.

00:26:05.195 --> 00:26:06.380
>> Dobře, a pořád tam.

00:26:06.380 --> 00:26:08.270
>> Ještě jednou, pořád tam je.

00:26:08.270 --> 00:26:11.030
Tak to Otevřme a ještě jednou.

00:26:11.030 --> 00:26:14.090
Tak ji také zavřete
jiná cesta zpět,

00:26:14.090 --> 00:26:17.390
bude chtít zachránit, ve skutečnosti
v podstatě totéž.

00:26:17.390 --> 00:26:20.090
Pojďme do "paměti
snímek "ještě jeden

00:26:20.090 --> 00:26:22.610
čas a Oh Wow, my
má pět instancí

00:26:22.610 --> 00:26:24.920
stránky, které tam visí
paměti a pokud jste

00:26:24.920 --> 00:26:28.130
obrovský obraz tam
bude mít mnoho paměti

00:26:28.130 --> 00:26:28.550
>> Mám to.

00:26:28.550 --> 00:26:32.615
>> Tak to je velmi běžný vzor

00:26:32.615 --> 00:26:36.800
protože není jasné, že
Tady máte únik paměti.

00:26:36.800 --> 00:26:39.830
Problém je v tomto případě
Toto UIBarButtonItem

00:26:39.830 --> 00:26:43.910
ve skutečnosti drží
nějaký nativní prostředek,

00:26:43.910 --> 00:26:45.485
je vázán na nativní prostředek.

00:26:45.485 --> 00:26:49.100
Pokud jasně neřekneme, že
Toto tlačítko již nepotřebuji,

00:26:49.100 --> 00:26:51.020
představujete
Tento nesmrtelný předmět.

00:26:51.020 --> 00:26:53.135
>> Mám tě. Jak tedy
Já tu věc vyřeším?

00:26:53.135 --> 00:26:56.240
>> Chcete-li tento problém vyřešit, použijte

00:26:56.240 --> 00:26:59.900
události Viewzmizet a
s naším tlačítkem něco udělat.

00:26:59.900 --> 00:27:00.150
>> Dobře.

00:27:00.150 --> 00:27:01.220
>> Takže máme dvě možnosti,

00:27:01.220 --> 00:27:02.735
mohli bychom použít

00:27:02.735 --> 00:27:05.299
Kliknuto na událost a
přihlášení a odhlášení odběru,

00:27:05.299 --> 00:27:07.160
ale my se vrátíme do

00:27:07.160 --> 00:27:10.400
Naše první položka při odběru
bez odhlášení.

00:27:10.400 --> 00:27:12.560
Uděláme něco zajímavějšího.

00:27:12.560 --> 00:27:14.030
Jen zneškodním tlačítko.

00:27:14.030 --> 00:27:15.680
>> To se mi líbí. Jsem
s tím skončil, že?

00:27:15.680 --> 00:27:18.320
>> Ano, říkali jsme
spravovaným světem,

00:27:18.320 --> 00:27:20.495
"Skončil jsem s tlačítkem
prosím, zlikvidujte ji. "

00:27:20.495 --> 00:27:24.365
Není to jasné, protože
spousta pohledů a obalů

00:27:24.365 --> 00:27:26.540
v Xamarin iOS
tuto metodu Dispose a

00:27:26.540 --> 00:27:29.015
Opravdu nevíš, kdy
Měl bys tomu říkat.

00:27:29.015 --> 00:27:30.815
Takže je to zajímavý případ.

00:27:30.815 --> 00:27:32.975
Ale uděláme to a půjdeme.

00:27:32.975 --> 00:27:34.700
To je jediná akce, kterou jsem přidal

00:27:34.700 --> 00:27:37.500
od spuštění předchozí aplikace.

00:27:38.290 --> 00:27:42.530
Začínám s profilerem
a stejným případem použití.

00:27:42.530 --> 00:27:44.000
My budeme sledovat objekty z

00:27:44.000 --> 00:27:46.310
samého začátku a
jisti, že jsou vyřazena.

00:27:46.310 --> 00:27:48.050
>> Velmi hustý. To je hezké.

00:27:48.050 --> 00:27:49.670
Tak jsi mohl, jak jsi řekl,

00:27:49.670 --> 00:27:53.270
namísto průchodu
celou akci,

00:27:53.270 --> 00:27:55.130
Můžete si být podobní, jak jsme

00:27:55.130 --> 00:27:57.605
provést připojení,
přihlášení k odběru, odhlášení odběru

00:27:57.605 --> 00:28:00.590
Byl bych si myslel, že
, ale v tomto případě

00:28:00.590 --> 00:28:03.125
Už jsi to udělal tak
jen se ho zbavujete.

00:28:03.125 --> 00:28:04.010
>> To je pravda.

00:28:04.010 --> 00:28:04.875
>> Cool.

00:28:04.875 --> 00:28:08.455
>> Ano, protože
očekávat, že bude odhlášených.

00:28:08.455 --> 00:28:10.840
Není to jako předplatné,

00:28:10.840 --> 00:28:14.230
jen předáme a delegujeme
uvnitř místního objektu.

00:28:14.230 --> 00:28:16.045
V případě NotificationCenter

00:28:16.045 --> 00:28:18.790
je to druh předplatného, protože
předáme místní objekt

00:28:18.790 --> 00:28:21.760
do některých statických
instanci nebo singleton.

00:28:21.760 --> 00:28:24.760
V tomto případě jsme právě používali
v místních zdrojích,

00:28:24.760 --> 00:28:26.395
neočekáváme únik paměti.

00:28:26.395 --> 00:28:26.680
>> Mám tě.

00:28:26.680 --> 00:28:28.630
>> Ale bohužel vidím

00:28:28.630 --> 00:28:32.660
Tato bariéra hodně a lidé
dostat se do těchto situací.

00:28:32.680 --> 00:28:37.530
Tak uděláme ten samý trik.

00:28:37.750 --> 00:28:41.760
Kéž by mohla tato data uložit.

00:28:41.950 --> 00:28:46.310
Takže máme jen jedno zobrazení
Řadič a delegát

00:28:46.310 --> 00:28:48.290
Pojďme na "Save".

00:28:48.290 --> 00:28:51.215
Vraťme.

00:28:51.215 --> 00:28:54.005
Vlastně zůstaneme na stránce podrobností.

00:28:54.005 --> 00:28:56.975
Trefte "paměťový snímek" a vidíme ho.

00:28:56.975 --> 00:28:59.315
Ještě jednou se na to podívám.

00:28:59.315 --> 00:29:02.735
Promluvíme si o tom. Takže jsme
má zde pouze jednu instanci.

00:29:02.735 --> 00:29:10.805
Po klepnutí na tlačítko Uložit klepněte na tlačítko snímek
a zmizí skenování.

00:29:10.805 --> 00:29:12.380
OK? Netěsnost paměti.

00:29:12.380 --> 00:29:13.250
>> Velmi hustý. Hezké.

00:29:13.250 --> 00:29:14.900
>> Nesmrtelný objekt byl zabit.

00:29:14.900 --> 00:29:16.445
>> Zabit. Moc dobrý.

00:29:16.445 --> 00:29:17.810
Jinak je to úžasný.

00:29:17.810 --> 00:29:20.600
Tak jednoduché, podívejte se na své události,

00:29:20.600 --> 00:29:22.850
ale také si prohlédněte, jak procházíte

00:29:22.850 --> 00:29:24.890
Tyto akce kolem a dokonce i já

00:29:24.890 --> 00:29:26.870
ani nepřemýšlejte o tom
tlačítko, abyste s vámi byli upřímní

00:29:26.870 --> 00:29:29.315
protože konstruktor
prochází tou věcí.

00:29:29.315 --> 00:29:29.600
>> Ano.

00:29:29.600 --> 00:29:30.725
>> Tak super.

00:29:30.725 --> 00:29:33.350
>> Také bych doporučil

00:29:33.350 --> 00:29:36.425
naši vývojáři, aby ji používali více
často se vám líbí jednou týdně,

00:29:36.425 --> 00:29:39.545
každý sprint a pak
Zobrazit využití paměti,

00:29:39.545 --> 00:29:41.585
můžete ji zobrazit jako test uživatelského rozhraní.

00:29:41.585 --> 00:29:45.590
Ukazuje to tu malou
pracovní sady paměti.

00:29:45.590 --> 00:29:48.050
Takže jen vidíte
měsíců, pokud se zvětší nebo

00:29:48.050 --> 00:29:51.530
Ne a pokud tě to rozroste
pravděpodobně neuniká paměť.

00:29:51.530 --> 00:29:53.360
>> Ukázal jsi iOS.

00:29:53.360 --> 00:29:54.560
A co bude s Androidem?

00:29:54.560 --> 00:29:57.500
Existuje nějaký specifický
nářadí, které můžete použít?

00:29:57.500 --> 00:29:59.465
>> Je to velká otázka
protože, androide,

00:29:59.465 --> 00:30:02.000
všechno, o čem jsme mluvili
iOS platí pro Android.

00:30:02.000 --> 00:30:02.150
>> Mám tě.

00:30:02.150 --> 00:30:03.440
>> Pouze nástroj pro

00:30:03.440 --> 00:30:07.145
Nativní profilátor androida
nazývá Android Profiler.

00:30:07.145 --> 00:30:08.390
Je to fakt super.

00:30:08.390 --> 00:30:09.740
Ukazuje vám to spoustu

00:30:09.740 --> 00:30:12.380
informace, ale stále jste
jej používat, kdo je

00:30:12.380 --> 00:30:14.330
Xamarin Profiler ve spojení

00:30:14.330 --> 00:30:16.790
z důvodu spravovaných
světa a v rodném světě.

00:30:16.790 --> 00:30:17.930
>> Mám tě. Prostě to

00:30:17.930 --> 00:30:19.340
to bylo super, že
jsou tu skvělé nástroje

00:30:19.340 --> 00:30:22.400
k dispozici bez ohledu na to, kde
jsi v, iOS, Android.

00:30:22.400 --> 00:30:23.240
>> To je pravda.

00:30:23.240 --> 00:30:24.005
>> Můžu do toho jít.

00:30:24.005 --> 00:30:25.820
Upřímně, jen se dívám
v některých z nich

00:30:25.820 --> 00:30:28.160
Jsem si jistý, že můj kód,
je tam hodně špatných věcí.

00:30:28.160 --> 00:30:29.480
Takže když budu vysílat další,

00:30:29.480 --> 00:30:31.790
bude to
opravování nevrácení paměti.

00:30:31.790 --> 00:30:32.180
>> Dobře.

00:30:32.180 --> 00:30:34.280
>> Velmi hustý. Ještě něco Alexej
o kterém chcete mluvit?

00:30:34.280 --> 00:30:35.315
>> To všechno pro dnešek.

00:30:35.315 --> 00:30:37.865
>> Super. No, díky
všem pro optimalizaci.

00:30:37.865 --> 00:30:40.010
Alexi, moc ti děkuji za
všechny tyhle věci.

00:30:40.010 --> 00:30:42.305
>> Děkuji vám. Děkuji vám
jsi James, že jsi mě nechal.

00:30:42.305 --> 00:30:43.970
>> Absolutně, a určitě

00:30:43.970 --> 00:30:45.920
abyste si rezervujete všechny
Níže uvedené poznámky,

00:30:45.920 --> 00:30:47.420
otevřít veškerý zdroj
kód, všechny odkazy

00:30:47.420 --> 00:30:48.980
pro veškerou dokumentaci tam dole.

00:30:48.980 --> 00:30:51.740
Můžete také přejít na aka.ms/Xamarin

00:30:51.740 --> 00:30:54.485
osvědčené postupy pro celou řadu.

00:30:54.485 --> 00:30:55.790
Proto se ujistěte, že jste přihlášeni

00:30:55.790 --> 00:30:57.695
Dnes, kdekoli jsi
právě teď pozoruje.

00:30:57.695 --> 00:30:59.090
Já jsem James Montemagno.

00:30:59.090 --> 00:31:01.790
Tohle je Xamarin
Ukažte a děkujeme za sledování.

00:31:01.790 --> 00:31:02.480
>> Děkuji vám.

00:31:02.480 --> 00:31:09.230
HUDBY

00:31:09.230 --> 00:31:11.120
>> Hej, tady James.
Jen jsem chtěl zkontrolovat

00:31:11.120 --> 00:31:13.175
a děkujeme za
sledování tohoto videa.

00:31:13.175 --> 00:31:16.265
Nyní proveďte všechny věci, které jste
Víte, že chcete dělat takové podobné,

00:31:16.265 --> 00:31:18.710
přihlášení k odběru a řazení
Tento oznamovací zvonek,

00:31:18.710 --> 00:31:20.825
stát součástí
oznamovací tým.

00:31:20.825 --> 00:31:22.190
Když jste tady, podívejte se

00:31:22.190 --> 00:31:25.400
všechna tato úžasná videa
že už jsem kódován.

00:31:25.400 --> 00:31:29.040
Klepněte na tu věc. Klepněte
, dávej pozor, udělej to.

