Strong vs. Weak Swift 5: What is Weak Self (Xcode 11, 2020)

Поделиться
HTML-код
  • Опубликовано: 28 июн 2024
  • In this video we will learn about memory management in Swift 5 and Xcode 11. Specifically we will look at strong vs weak memory retention and how it relates to ARC (automatic reference counting)
    💻 Source Code: / iosacademy
    🎥 Subscribe for more: ruclips.net/user/iOSAcademy?su...
    😎 Like my teaching style? Check out some of my most popular courses! courses.iosacademy.io
    #swift #iOSDeveloper #swiftdeveloper
    Join the iOS Academy Community: iosacademy.io/
    ** Get Skillshare free for 2 Months and learn iOS
    www.skillshare.com/r/user/afraz
    ** Manage all your investments from app earnings on Betterment!
    bit.ly/3eBwlI9
    ** Grow your own RUclips tech channel with TubeBuddy:
    www.tubebuddy.com/iosacademy

Комментарии • 68

  • @hykim5137
    @hykim5137 4 года назад +7

    Awesome! I was really looking forward to a video on this topic from you. Thank you for making it.

  • @Ali-uh5th
    @Ali-uh5th 3 года назад +11

    Great! The explanation is so clear and easy to understand. But it seems that the audio volume is a quite low. Keep up the good work!

  • @wannabemusician5519
    @wannabemusician5519 3 года назад +3

    omg Thank you so much for explaining this out.! i love ur content btw. :)

  • @dalton4842
    @dalton4842 4 года назад +6

    Clearest explanation out there for this :)

    • @iOSAcademy
      @iOSAcademy  4 года назад

      Thanks! Did you like my balloon example hahaha

  • @aafaqahmed2265
    @aafaqahmed2265 2 года назад +1

    It was awesome, best explanation ever scene on this topic!

  • @hustlas4ever
    @hustlas4ever 4 года назад +2

    wow! was reading about this the other day and can't really understand. lol. Thank you for this.

    • @iOSAcademy
      @iOSAcademy  4 года назад +1

      Ha ha you’re welcome, glad I could help. Don’t forget to subscribe!

  • @amielterence
    @amielterence 2 года назад

    Thanks bro, really helped a lot👌🏽

  • @dev_jeongdaeri
    @dev_jeongdaeri 4 года назад +1

    Super awesome!

  • @vuralcelik8060
    @vuralcelik8060 3 года назад

    Great explanation !

  • @rahuljamba5846
    @rahuljamba5846 Год назад

    Very unique way to define weak and strong also handle memory leakage.

  • @RahulGupta-wp6bk
    @RahulGupta-wp6bk 3 года назад

    Very Helpful video...Thanks Bro.. :)

    • @iOSAcademy
      @iOSAcademy  3 года назад

      Your welcomd! Dont forget to subscribe and like

  • @user-yd9xy3rb4x
    @user-yd9xy3rb4x 3 года назад +1

    Not even a month ago, did I think the topic is incredibly hard to understand. It's a piece of cake now.

  • @radiagulzan
    @radiagulzan 3 года назад +1

    thank you !

  • @chatsnoirblamo
    @chatsnoirblamo 4 года назад +5

    Thank you because I learned Java in Eclipse and it was obvious we were pretending memory didn’t exist. That’s fine for python scripts but I want to move into real apps!

    • @iOSAcademy
      @iOSAcademy  4 года назад +1

      Youre welcome! Glad i could help

  • @jiayi4154
    @jiayi4154 3 года назад +2

    Thank you very much for the content! Can you do one for core data and saving and retrieving in an ios file system?

    • @iOSAcademy
      @iOSAcademy  3 года назад +1

      Youre welcome & sure! Added to my list

  • @ievgenievgen3651
    @ievgenievgen3651 2 года назад +2

    You give wrong examples about reference cycles. In all your examples, you use a local reference type variable of functions. Such variables do not hold by class it is in the function scope. If you move your alert var in class scope, then you will get ref cycle. You can easily check that by using the deinit in your class for checking did you viewcontroller call it or not.

  • @araapoyan2814
    @araapoyan2814 3 года назад +1

    You are the best

  • @hasanbasriozturk1550
    @hasanbasriozturk1550 2 года назад +1

    Still the best

  • @alamgirkhan001
    @alamgirkhan001 Год назад

    Great explanation! Make a video on Local DB in IOS App with SQLite.

  • @rudolphhock1155
    @rudolphhock1155 3 года назад

    It doesn't seem that iOS is going to pick up on memory leaks. I haven't delved into this subject much more than this video, but surely Swift should have built in tools to help pinpoint memory leaks ?

  • @sharbel9624
    @sharbel9624 3 года назад

    For some reason I'm having a hard time replicating this on swiftUI rather than UIKit. Any chance anyone can help me out here?

  • @dodilodi1278
    @dodilodi1278 3 года назад

    12:00 It would be the same even if func getData() wasnt private?

  • @kuldeep4954
    @kuldeep4954 2 года назад +1

    Please do a follow up video

  • @faastfood
    @faastfood 4 года назад +3

    I tried AlertConroller example and checked in instruments but didn't get leaks indicator. Can you please tell me why is it happening?

    • @puneetmahali1647
      @puneetmahali1647 3 года назад

      Yes, I have also some confusion, as video tutorial states that the code doesn’t give any error but if give weak self then it will not leak the memory. Then how do we know when n where memory will leak?

    • @choonshon5165
      @choonshon5165 3 года назад

      Tell me if I’m wrong.. but I think it’s because the AlertController is not owned by the “ViewController”.
      Once dismissed, the AlertController has no reference pointing it and it is released.

    • @ningzedai9052
      @ningzedai9052 2 года назад +2

      The answer is simple, what this youtuber said is not correct about the alert controller. The alert controller is not owned by "self", so there is no retain cycle. He is misleading others.

  • @TephrosXI
    @TephrosXI Год назад

    What if the "self" in a closure was of Struct type; Is it still possible to have a retain cycle?

    • @neslzkusfep
      @neslzkusfep Год назад

      Hi westo127!
      My response may not be the most precise or accurate as I am also still learning, but this is my understanding of iOS memory management.
      To address your question, the object's data type (i.e. Struct) isn't the concern.
      A retain cycle occurs when two separate objects are strongly pointing to (referencing) each other; if one of the objects is deallocated (removed) from memory while another object is still strongly referencing it, the object that is referencing the deallocated object will still exist in memory somewhere, pointing to (or otherwise linked to) some object that no longer exists in memory - taking up space while serving no purpose. The goal of proper memory management is to ensure that objects that are added to memory are deallocated if they are no longer being used.
      In the example provided, there are two objects: ViewController and Alert. The parent ViewController object is strongly pointing to a child Alert object because the Alert object is defined within the ViewController object; this Alert object is a separate object from the ViewController object though it is defined in the ViewController class. If memory is properly managed, the Alert object should be deallocated from memory if the ViewController gets deallocated from memory. Before the edit was made to the Alert object's handler, the Alert object was strongly referencing the parent ViewController class by calling the parent ViewController's method 'doSomething()'. Since the ViewController object strongly references the Alert object and the Alert object is strongly referencing the ViewController by calling the ViewControllers doSomething() method, this causes a retain cycle. To prevent a retain cycle, you want the child Alert object to weakly reference the ViewController's doSomething method; that way when the user dismisses the Alert object from the View - an action that should deallocate the Alert object from memory - the strong reference to the ViewController won't prevent that from happening.
      Hope this was helpful and not just a reiteration of what was previously discussed in the video. :)

  • @Shermyyy
    @Shermyyy 4 года назад

    #suddenlyitalian
    completino hahaha
    but great video! very informative!!

  • @RatherBeCancelledThanHandled
    @RatherBeCancelledThanHandled 3 года назад

    Thanks for sharing but it seems to me like there is no point in using a strong reverence . Why wouldn’t we use a weak reference ?

    • @TheBooban
      @TheBooban 3 года назад

      Strong is default because you don’t want your object to just disappear when you need it, do you? So figure out how you want to handle it, and then use weak.

  • @boxinggio
    @boxinggio 3 года назад +1

    In SomeDelegate example you wrote weak var delegate : SomeDelegate? is weak necessary? I think making it optional is already weak right?

    • @iOSAcademy
      @iOSAcademy  3 года назад

      Weak is needed to avoid retain cycle.

    • @boxinggio
      @boxinggio 3 года назад

      iOS Academy but optional doesn't already have weak reference?

  • @Chromasophy
    @Chromasophy 2 года назад

    self? as an optional makes sense ~

  • @intros1854
    @intros1854 2 года назад +1

    I feel pretty embarrassed 🤭. I made whole project with memory leaks 😂. Thanks, I'm gonna fix it right now

  • @jason18401
    @jason18401 3 года назад

    So should use [weak self] in all closures?

    • @iOSAcademy
      @iOSAcademy  3 года назад +1

      Yes, almost 99 percent of time

  • @pratikgajbhiye5354
    @pratikgajbhiye5354 4 года назад

    One small question, when to use self and when not?

    • @iOSAcademy
      @iOSAcademy  4 года назад

      Swlf is needed in closures

    • @aviadsabag8193
      @aviadsabag8193 4 года назад

      When you want to ref to your current variable inside VC, for example in init u can assign what u get as a param into your local variable. for exmaple - self.count = count(the param that u get from the user). btw there's self in every programming langue :)

  • @user-xx7hp8jy2x
    @user-xx7hp8jy2x 3 года назад +1

    weak selfムズすぎる😭

  • @AkimboFennec
    @AkimboFennec Год назад

    Not a good explanation. Did not understand it at all.

  • @vikramt87
    @vikramt87 2 года назад +1

    very very complex.. please dont upload this kind of videos create more confusion