Mac Forums

Mac Forums (http://www.mac-forums.com/forums/)
-   OS X - Development and Darwin (http://www.mac-forums.com/forums/os-x-development-darwin/)
-   -   Pointers in Objective-C (http://www.mac-forums.com/forums/os-x-development-darwin/199938-pointers-objective-c.html)

allyouhave 04-26-2010 12:33 AM

Pointers in Objective-C
 
I'm just now teaching myself how to code in Objective-C (however, I have no background in C or any other extension), and I'm having some trouble understanding pointers. While reading around, I noticed a lot of people explaining that all objects are just pointers referencing objects. If this is true, then why do I ever have to explicitly create pointers? What is the difference between the follow two statements?

int numberOne = 12;
int *numberTwo = 14;

From what I remember from Java, it would follow that I could do numberOne = numberTwo, and therefore both are equal to 14. I can, however, still change either number individually. i.e. numberTwo = 17 (and therefor numberOne = 14 and numberTwo = 17). Of course, if I were to do the opposite, then the pointer numberTwo would point to the same object as numberOne, and every time I changed one of them, "both" would change.

But if all variables are actually just pointers, then aren't these two phrases exactly the same?

numberOne = numberTwo;
or
numberTwo = numberOne;

I have about five ebooks on Cocoa or Objective-C, and I'm only three chapters into my first book, so if any of you can reference a book or website for me to check out, or just shed some light on my problem with understanding, that would be faaantastic.

Raz0rEdge 04-26-2010 08:44 AM

In the realm of C, you would use pointers to pass it's reference to a function as opposed to the value itself..

Your example above, (although buggy) is how you'd do it in C. The problem is that numberTwo has no "storage" that it's pointing to, so when you assign 14 to it, that becomes the "storage" and later one if you try to de-reference the pointer, the program will crash.

Within Objective-C, you still use pointers and you have to to be able to send messages to the class object..

For example:
Code:

Fraction *myFraction = [[Fraction alloc] init];
[myFraction somemethod];

The [] syntax in Obj-C is doing a bunch of work here..in the first line, it will call your Fraction class' alloc function, followed by init function. What is returned is a instance of the object fully initialized. You can now call other methods within that class with the second line and pass in any arguments and so on.

Pointers are very useful constructs..so much so that certain languages make EVERYTHING a pointer (visibly or not)..but there're also a lot of easy pitfalls to get into..

Regards

systix 05-04-2010 12:46 PM

I don't know objective-c, i aim to learn though. In C however a good example of the use of pointers is a function that swaps two values. eg

Code:


voide main()
{
    int val1, val2;
    swap (val1, val2);
}

int swap (int val1, int val2)
{
    int temp = val1;
    val2 = val1;
    val1 = temp;
}



This will not work. The values are copied into the swap() function and swapped within the scope of the function, but not externaly to it. However, if we pass in pointers to the original variables we can indirectly access them and the swap will occure on the original values.

I hope this helps!


All times are GMT -4. The time now is 06:00 PM.

Powered by vBulletin
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.