I'm new to Objective C
I tried using a simple struct
and got
arc forbids objective-c objects in struct
Looking up ARC, it looks like this is the specification that defines Objective C syntaxt - is that correct?
Secondly, how do I go about using struct
if it's not allowed?
Thank you!
Edit: Some code as a sample
@implementation Cities {
// The goal is to have a struct that holds information about a city,
// like when a person started and ended living there.
// I was trying to make this struct an instance variable of the Cities
// class
// XCode doesn't like the below struct definition
struct City
{
NSString *name;
int *_startYear;
int *_endYear;
};
}
You can use
struct
in Objective-C++ with ARC in any case.If you compile it as Objective-C, you failed as you said.
Because C struct doesn't have the capability of management for variable life span.
But in C++, struct does have destructor function. So C++ struct is compatible with ARC.
If you want to use struct in Objective C ( with ARC) use "__unsafe_unretained" attribute.
Structs are a C construct. The compiler is telling you, in very unabiguous terms, that you can't have Objective-C objects inside a struct, not that structs are illegal.
You can use regular C structs all you want.
Your example tries to put references to an Objective-C object,
NSString
, into astruct
, which is incompatible with ARC.Structs are typically used for simple data structures. Examples that you are likely to come across in Objective-C code are
CGPoint
andCGRect
.CGPoint
looks something like thisA
CGFloat
is, I think, just adouble
, and the idea it to represent a point in 2D space. Structs can include pointers to other structs, C-arrays and standard C data types such asint
,char
,float
... And Objective-C classes can contain structs, but the reverse does not work.Structs can also get pretty complicated, but that is a very broad topic that is best researched using Google.