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

Поділитися
Вставка
  • Опубліковано 2 сер 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: ua-cam.com/users/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 UA-cam 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!

  • @dalton4842
    @dalton4842 4 роки тому +6

    Clearest explanation out there for this :)

    • @iOSAcademy
      @iOSAcademy  4 роки тому

      Thanks! Did you like my balloon example hahaha

  • @wannabemusician5519
    @wannabemusician5519 3 роки тому +3

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

  • @aafaqahmed2265
    @aafaqahmed2265 3 роки тому +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!

  • @rahuljamba5846
    @rahuljamba5846 Рік тому

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

  • @amielterence
    @amielterence 2 роки тому

    Thanks bro, really helped a lot👌🏽

  • @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

  • @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.

  • @vuralcelik8060
    @vuralcelik8060 4 роки тому

    Great explanation !

  • @jiayi4154
    @jiayi4154 4 роки тому +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  4 роки тому +1

      Youre welcome & sure! Added to my list

  • @dev_jeongdaeri
    @dev_jeongdaeri 4 роки тому +1

    Super awesome!

  • @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.

  • @radiagulzan
    @radiagulzan 3 роки тому +1

    thank you !

  • @dodilodi1278
    @dodilodi1278 3 роки тому

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

  • @RahulGupta-wp6bk
    @RahulGupta-wp6bk 3 роки тому

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

    • @iOSAcademy
      @iOSAcademy  3 роки тому

      Your welcomd! Dont forget to subscribe and like

  • @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?

  • @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 ?

  • @araapoyan2814
    @araapoyan2814 3 роки тому +1

    You are the best

  • @hasanbasriozturk1550
    @hasanbasriozturk1550 3 роки тому +1

    Still the best

  • @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 4 роки тому

      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 4 роки тому

      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. :)

  • @boxinggio
    @boxinggio 4 роки тому +1

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

    • @iOSAcademy
      @iOSAcademy  4 роки тому

      Weak is needed to avoid retain cycle.

    • @boxinggio
      @boxinggio 4 роки тому

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

  • @alamgirkhan001
    @alamgirkhan001 Рік тому

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

  • @kuldeep4954
    @kuldeep4954 2 роки тому +1

    Please do a follow up video

  • @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.

  • @jason18401
    @jason18401 3 роки тому

    So should use [weak self] in all closures?

    • @iOSAcademy
      @iOSAcademy  3 роки тому +1

      Yes, almost 99 percent of time

  • @Shermyyy
    @Shermyyy 4 роки тому

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

  • @intros1854
    @intros1854 2 роки тому +1

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

  • @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 :)

  • @Chromasophy
    @Chromasophy 2 роки тому

    self? as an optional makes sense ~

  • @龘䨺齉纞靐鼱麤鸞驫
    @龘䨺齉纞靐鼱麤鸞驫 3 роки тому +1

    weak selfムズすぎる😭

  • @AkimboFennec
    @AkimboFennec 2 роки тому

    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