Pointers in Objective-C

Joined
Dec 30, 2009
Messages
4
Reaction score
0
Points
1
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

Well-known member
Staff member
Moderator
Joined
Jul 17, 2009
Messages
15,745
Reaction score
2,071
Points
113
Location
MA
Your Mac's Specs
2022 Mac Studio M1 Max, 2023 M2 MBA
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
 
Joined
Dec 9, 2008
Messages
19
Reaction score
0
Points
1
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!
 

Shop Amazon


Shop for your Apple, Mac, iPhone and other computer products on Amazon.
We are a participant in the Amazon Services LLC Associates Program, an affiliate program designed to provide a means for us to earn fees by linking to Amazon and affiliated sites.
Top