На вашем примере
[[NSString alloc] initwithString: (NSString
*)aString];
Когда вы делаете выделение, вы помещаете в память место для String, а следовательно, выделение.затем вы говорите ему инициализировать строкой, равной aString.(NSString *) является идентификатором для типа объекта, поэтому вы говорите, что aString объявлен как NSString.
Я обычно делаю что-то вроде
NSString * aString = @"String value";
объявляет, что aString равно.
Если вы распределяете что-то в памяти, чтобы управлять этим, вам нужно будет освободить этов правильное время, например, в разделе
-(void) dealloc {}
вашего кода
Все о NSString можно объяснить в этой документации от Apple NSString