New on objective-c

I want to do this:

[[ClassA new] addObject:[[ClassA new] addObject:[ClassA new]]];

but the compiler returns:

"error: invalid use of void expression"

Is there any way to do this? as in java:

ClassA = new ClassA( new ClassA( new ClassA()));
+3
source share
5 answers

The real problem is that it has the correct void type , so you cannot embed this expression in an external call argument :. For example, see the Documentation for - method signature . This may catch you if you are used to other behavior in another language, especially Java. Also note that it returns , not the object that was deleted. -[ClassA addObject:]-addObject-[NSMutableArray addObject:]- (void) addObject:(id)anObject-removeObject:void

, , +new , - . +[NSObject new]. +new " ", +alloc/-init... . , , +new -init, + new..., -init... . . +new , , -init.

Java, SO, , Objective-C alloc/init new like Java, ++ ..

+5

, new, ClassA, , , ClassA addObject:, , . , , ClassA:

+ (ClassA *)new;
- (ClassA *)objectByAddingObject:(ClassA *)newObject;

new ClassA, , ,

return [[ClassA alloc] init];

addObject: ClassA ClassA, -:

self.object = newObject;
return self;

, - addObject: (ClassA *), (void), . , , - :

[[ClassA alloc] initWithObject:[[ClassA alloc] initWithObject:[[ClassA alloc] init]]];
+2

, addObject, .

:

[[ClassA new] addObject:[[ClassA new] addObject:[ClassA new]]];

Java-:

ClassA = new ClassA()->AddObject( new ClassA()->AddObject( new ClassA() ) );

, AddObject void, self.

, , "" , , addObject, , . .

:

ClassA* c2 = [ClassA classA];
[c2 addObject:[ClassA classA]];
ClassA* c = [ClassA classA];
[c addObject:c2];

ClassA classA :

(ClassA*) classA
{
    return [[ClassA new] autorelease];
}

:

(ClassA*) classAWithObject: (ClassA*) inObject
{
    ClassA* c = [ClassA classA];
    [c addObject:inObject];
    return c;
}

:

ClassA* c = [ClassA classAWithObject:[ClassA classAWithObject:[ClassA classA]]];

Cocoa/Objective C, Java-, .

+2

C, , - :

[[ClassA alloc] init]

alloc, , init .

ClassA, , , :

[[[ClassA alloc] init] addObject:[[[ClassA alloc] init] addObject:[[ClassA alloc] init]]]

java, , , ClassA , . ( , ClassA initWithObject.)

ClassA *myClass = [[ClassA alloc] initWithObject:[[ClassA alloc] initWithObject:[[ClassA alloc] init]];
0

edit: Not required, since it is newinherited from NSObject. See Quinn Taylor's answer for more details, and while you're there to be true. :)

@interface ClassA
{
    //...
}
+(ClassA)new;
//...
@end

@implementation ClassA
+(ClassA)new { return [[ClassA alloc] init]; }
//...
@end
-1
source

Source: https://habr.com/ru/post/1711195/


All Articles