Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Basic objective C variable declaration

I am puzzled by how is variable declared in objective C.

1: I see @property and @synthesize statement being used. My question regarding that is, what are these 2 statement for? Why are they always used together? I guess @synthesize is a shortcut to create the getter and setter?

2:Say, I want to declare an NSMutableArray that would be only be accessible inside the class that was declared in. I have to perform myArray = [[NSMutableArray alloc] init] before using the addObject method to write something to it. When do I release the array then?

3:Is there a different way to declaring a variable that is only accessible only at the class it was declared to being accessible at all classes?

4:Similar to question 2, but now the variable is an NSString. Why I don't have to alloc & init it to share the same variable within its own class? Whats the different between self.myString = @""; to myString = @"";

Thanks a lot.

like image 622
John Avatar asked Aug 31 '11 00:08

John


People also ask

What is the variable declaration in C?

A variable declaration provides assurance to the compiler that there exists a variable with the given type and name so that the compiler can proceed for further compilation without requiring the complete detail about the variable.

How do you declare an int variable in Objective-C?

Declaring an int variable In Objective-C, you always have to explicitly specify the type of variable you're declaring. In Swift, the “var” keyword is used to declare a variable and you don't have to specify the type if it can be inferred from what you're assigning it.

What is declaration of variable?

Declaration of a variable is for informing the compiler of the following information: name of the variable, type of value it holds, and the initial value if any it takes. i.e., declaration gives details about the properties of a variable. Whereas, Definition of a variable says where the variable gets stored.


2 Answers

For your first question:

@property (nonatomic, retain) NSString * someProperty;

This declares a property of the class. It becomes part of the public contract of the class but still lacks something important - actual implementation

@synthesize someProperty;

This is compiler sugar, its creates a getter and setter method for your property. To wit, this is the implementation that is needed in order to actually use your property in your class and from other classes.

You will in almost all situations, always have a @synthesize for each @property you declare.


For your second question:

You are correct about how to initialize your array property. In order to release it you would do the following in your classes dealloc method:

- (void) dealloc {
    self.myarray = nil;

    [super dealloc];
}

This effectively releases the array (assuming you declared your property with the keyword retain).


And for your last question:

Properties of a class are always available from other classes. In order to create a globally accessible variable you would declare it as static.

like image 66
Perception Avatar answered Oct 03 '22 02:10

Perception


Ad 1: a property is a construct to control access an ivar (usually private) by getters and setters. Actually, a property doesn't even have to have a supporting ivar. Yes, @synthesize generates getter and setter (and ivar).

Ad 2: You release it when you don't need it anymore. When that is depends on the logic of your code.

Ad 3: If I understand that correcttly, you want @private ivars. Normally, ivars are protected, i.e. only accessible inside the class or in derived classes. Private ivars are only accessible inside the class itself. Properties are publicly accessible.

Ad 4: myString = @"" writes to the ivar directly, while self.myString = @"" uses the property setter.

like image 39
Rudy Velthuis Avatar answered Oct 03 '22 01:10

Rudy Velthuis