Working with high-level programming languages, such as C# and Java, without the basic knowledge of object-oriented programming with a somewhat lower-level language, such as C++, does not make one a good programmer. In my opinion, an expert programmer should be able to manage the memory by hand. In other words, If you don't know how to program in C, and if interested in OOP, how to program in C++, you always lack the fundamentals of how the memory works. This is the main cause of trouble for those people like you.
And also, don't forget that Objective-C is a dynamic language, as opposed to Java and C# which are totally static. Dynamicity of a language provides the programmer with a power to design and implement patterns, not possible in opposite languages.
When I started to work with Apple development technologies, I was in a situation similar to you, but with a difference: I knew how to manage the memory. May be ridiculous, but I don't even use ARC, or garbage collector (in Mac OS apps). I prefer to do the job by hand.
All of these was for telling you that memory management is not as frustrating as people say, or as it appears. Take some time, and learn to design and develop object-oriented programs in C++, if you want to be a professional programmer. C++ is the only language that gives you such a necessary understanding.
If you are interested in the topic, feel free to let me know and I will give you some information useful to get started with.
I am sure you are now thinking about: So, what is the difference? Is there anything that is straightforward to implement in C++ and not in C#?
The answer is: Maybe nothing... almost all you can do in C++, is possible to do in C#. The difference is in how you think about the solution, and how you design your classes, as there is no magic wand to remove the garbages from memory. You are responsible for everything. This is one of the reasons why C++ programs are so much faster than C# or Java equivalents.
Message was edited by: Mani Hamedani