una reproduccion listas lista editar crear compartir como apple agregar actualizar iphone objective-c linked-list

iphone - reproduccion - Crear listas vinculadas en el objetivo C



crear lista de reproduccion apple music (3)

¿Por qué molestarse con una estructura? Solo usa una clase:

@interface MyEvent:NSObject @property(copy) NSString *activity; @property float latitude; ... etc ... // and that linked list gunk @property(retain) MyEvent *nextEvent; @end @implementation MyEvent @synthesize activity, latitude, nextEvent; - (void) dealloc { [activity release], activity = nil; [nextEvent release], nextEvent = nil; [super dealloc]; } @end

No hay una sobrecarga significativa frente a una estructura (si las llamadas al método son realmente mensurables, incluso podría exponer ivars directamente). Mejor aún, en el momento que desee archivar la estructura, agregar lógica comercial o hacer cualquier otra cosa interesante, simplemente puede agregar métodos.

typedef struct { NSString *activty; NSString *place; float latitude; float longitude; } event; typedef struct { event *thing; Node *next; } Node;

Este es el código que tengo en mi archivo .h para crear dos estructuras para contener datos (una para un nombre / lugar / ubicación de eventos, y otra para los nodos de una lista vinculada. Puedo usar la estructura de eventos en la estructura del nodo, pero necesito usar la estructura del nodo dentro de sí misma. En C ++ esto funcionaría, pero ¿cómo puedo lograr esto en Objective-c? ¡Gracias!


Creo que encontrará que no funciona en C ++ (pero podrían haber cambiado las reglas de la gramática para que así sea). Probablemente quieras decir algo más como esto:

struct Node { event *thing; Node *next; };

Eso funciona en C ++ porque Node es equivalente a struct Node si no hay algo llamado Node (esto a veces causa errores de confusión cuando Foo es una clase y el método de instancia de otra clase, lo que sucede en algunos estilos de codificación).

La solución es decir struct Node . Prefiero esto; parece más puro. Hay algunas buenas razones para usar un typedef (por ejemplo, cosas como TUInt64 que históricamente podrían haber sido una estructura debido a la falta de compatibilidad con el compilador). Si usa un typedef, no hay razón para darle a la estructura un nombre diferente ya que están en diferentes espacios de nombres (las estructuras de IIRC son un "espacio de nombres de etiquetas").

La versión typedef habitual es algo como esto:

typedef struct Node Node; struct Node { event *thing; Node *next; };

Alternativamente, cambie la extensión de archivo a .mm y luego funciona porque está compilando Objective-C ++.


Debe nombrar su estructura como lo haría en C. Por ejemplo:

typedef struct Node { event *thing; struct Node *next; } Node;

Una mejor pregunta, sin embargo, es ¿por qué quieres hacer esta lista vinculada en primer lugar? ¿Por qué no utilizar uno de los tipos de contenedores proporcionados por el marco?