Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by AlwaysSunny · Feb 03, 2015 at 02:47 PM · bestpractices

[best practices] Safely Destroy entries while iterating over them?

Just happened upon this in the docs:
Also note that you should never iterate through arrays and destroy the elements you are iterating over. This will cause serious problems (as a general programming practice, not just in Unity).

I do this all the time with inverted loops and never have any issues, so I wondered, what is the truth behind this cautionary statement? Is this actually a dangerous thing to do for some reason I've yet to encounter? Big thanks,

 for (int = collection.Count-1; i>=0; i--) Destroy( collection[i] );

edit to include docs link: http://docs.unity3d.com/ScriptReference/Object.DestroyImmediate.html

Comment
Add comment · Show 3
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image meat5000 ♦ · Feb 03, 2015 at 02:49 PM 0
Share

Got a link to the statement?

Elements or element contents?

avatar image meat5000 ♦ · Feb 03, 2015 at 03:00 PM 1
Share

I think this refers to the mechanic of DestroyImmediate rather than destroy.

But, I guess it leads to bad indexing. If an element is destroyed during a loop perhaps it is not consolidated till the end of the frame leaving discontinuity.

In the example of a List, where the List is automatically resized you could end up skipping elements, perhaps.

avatar image AlwaysSunny · Feb 03, 2015 at 03:06 PM 0
Share

I'm sure you're quite right, which is why a reverse loop is necessary to resolve indexing kerfuffles. It never created a problem for me before, so that statement seemed funny to me. Thanks,

1 Reply

· Add your reply
  • Sort: 
avatar image
1

Answer by smoggach · Feb 03, 2015 at 03:00 PM

It's only dangerous if you do it wrong, which is very easy to do.

DestroyImmediate is meant for use in the Editor. Destroy uses garbage collection which is why you don't have problems destroying things while iterating over them (they still live for a frame or two).

Comment
Add comment · Show 2 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image AlwaysSunny · Feb 03, 2015 at 03:08 PM 0
Share

I wondered whether this might be specific to DestroyImmediate and Editor scripting. It wasn't worded as such, so I was confused by the statement. Appreciate the feedback,

avatar image meat5000 ♦ · Feb 03, 2015 at 03:22 PM 0
Share

Yeah, the wording suggests Destroy in general.

I've been told use of DestroyImmediate is bad but I needed it in a build of $$anonymous$$e and it was fine. Its just dangerous.

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

21 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Best practice for object communication 3 Answers

Which to use Arrays, Collections, Lists and Generics 0 Answers

Best Practices for exception handling Resource.Load 1 Answer

Propogate upgrade to different entities (Wepon upgrade System) 1 Answer

What is the best practice in handling scenes with 100+ rigidbodies and collisions on iOS? 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges