Una característica de las hojas de estilo que pocos conocen y uso es la capacidad para definir la regla de la "competencia" de las clases! Una etiqueta, de hecho, pueden poseer uno o más clases asociadas, lo que hace este último extremadamente versátil, así como mi favorito. ¿Cuántos desarrolladores utilizar para hacer, que tienden a adherirse a ID algunas reglas CSS, si los hubiere. Lo ideal sería, lógicamente, se introduzca el ID sólo para fines de secuencias de comandos, ya que identifica de forma única un elemento dentro del DOM.
Artículos con la etiqueta "clase"
La regla lógica en CSS
Objective-C: Notificaciones y delegados
En Objective-C tenemos dos muy acostumbrados a recibir y enviar mensajes entre clases: las notificaciones y los delegados. La diferencia entre los dos, además de ser en el nivel de ejecución, depende sustancialmente de "cómo" - objetos - puede recibir un mensaje. En primer lugar quiero mostrar cómo el concepto nació de delegado.
Objective-C: públicos, protegidos y privados
Yo escribí un artículo similar para ActionScript hace mucho tiempo: ActionScript 3.0: públicos, protegidos, privados e internos . Al releerlo me di cuenta de dos cosas: la primera fue la extrema semejanza con Objective-C, aunque este último no incluye internal .
Muy corto truco: cómo utilizar NSFileManager
, in quanto quest'ultimo restituisce un'instanza singleton, cioè sempre lo stesso puntatore ad oggetto (non thread safe). Apple recomienda utilizar la instancia del objeto NSFileManager y no su clase meotodo defaultManager , ya que éste devuelve una instancia singleton, que es siempre el mismo puntero al objeto (no es seguro para subprocesos).
Objective-C: la creación de subclases y categorías
En Objective-C se puede extender una clase determinada de dos maneras: mediante la ejecución de un clásico de la creación de subclases (véase también la herencia) o el uso de las denominadas categorías .
Nota: también hay una tercera vía en Objective-C se indica con el nombre de Posando que podríamos llamar una mezcla de la subclase (porque define un nuevo nombre) y categorías (por un momento dado todas las clases de un tipo se comportan como nueva) .
Objective-C: exponen las propiedades de una clase
Me gustaría mostrar y discutir algunos ejemplos acerca de cómo agregar y manipular las propiedades en la clase de Objective-C. : Un ejemplo clásico es, precisamente, de la siguiente manera: en la definición de nuestra interfaz de clase se definen dos propiedades nome y cognome :
1 2 3 4 5 6 7 8 9 10 11 |
e setter usati rispettivamente per leggere ed impostare le nostre due proprietà: En el archivo de la aplicación que inserta la declaración @synthesize de manera que Xcode va a producir para nosotros los métodos getter y setter , respectivamente, que se utiliza para leer y establecer nuestras dos propiedades:
1 2 3 4 5 6 7 8 | / / MyClass.m # Importar "MyClass.h" @ Aplicación MyClass Sintetizar @ nombre, apellido; @ End |
, possiamo scrive: Cuando usted va a utilizar nuestra clase MyClass , que es cuando istanziaremo un objeto de tipo MyClass , se puede escribir:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | / / Cualquier otra clase, como AppDelegate / / En el archivo. H # Importar <UIKit/UIKit.h> # Importar "MyClass.h" @ Clase TestViewController; NSObject <UIApplicationDelegate> { @ Interfaz TesAppDelegate: NSObject {<UIApplicationDelegate> UIWindow * ventana; * TestViewController viewController; MyClass * MiClase; } / / En el archivo. M MyClass alloc ] ; MiClase = [MyClass alloc]; "Giovambattista" ; miaClasse.nome @ = "Giovambattista"; "miaClasse.nome = %@" , miaClasse.nome ) ; NSLog (@ "% @ = miaClasse.nome" miaClasse.nome); |
O, que es equivalente a:
1 2 3 | / / Siempre en el archivo. M @ "Undolog" ] ; [SetNome myClass: @ "Undolog"]; "miaClasse.nome = %@" , [ miaClasse nome ] ) ; NSLog (@ "miaClasse.nome =% @", [miClase nombre]); |
Hasta aquí todo bien. Sin embargo, podría inducir a error a la equivalencia de "variabli" interno (ivar) como bienes inmuebles. Para entender la diferencia, proponer de nuevo lo mismo que hacerlo sin que, en esta ocasión, la @synthesize . . Ahora, por lo tanto, debemos tratar con nosotros para escribir los métodos getter y setter . Para enfatizar aún más las diferencias, las variables internas rinominerò insertando un guión bajo delante del nombre. Sin embargo, vemos el código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # Importar <Foundation/Foundation.h> NSObject { @ Interface MyClass: NSObject { _nome; NSString * _name; _cognome; NSString * _cognome; } NSString * ) nome; // get - ( NSString *) Nombre; / / obtener NSString * ) cognome; // get - ( NSString *) Nombre; / / obtener void ) setNome : ( NSString * ) stringaIngresso; // set - (Void) setNome: ( NSString *) stringaIngresso; / / conjunto void ) setCognome : ( NSString * ) stringaIngresso; // set - (Void) setCognome: ( NSString *) stringaIngresso; / / conjunto @ End |
. A diferencia del ejemplo anterior, los punteros a las variables internas (incapsultate) se han convertido en _nome y _cognome . . @property è scomparso, in quanto non serve più. Además, hay cuatro definiciones de métodos que representan nuestra get y set . @property ha desaparecido, ya no es necesario.
Vemos el archivo de implementación MyClass.m :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # Importar "MyClass.h" @ Aplicación MyClass / / Obtener un "nombre" NSString * ) nome { - ( NSString *) Nombre { _name Retorno; } / / Set para "nombre" void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso _name = StringaIngresso; } / / Obtener de "apellido" NSString * ) cognome { - ( NSString *) Nombre { _cognome regresar; } / / Set para "Last Name" void ) setCognome : ( NSString * ) stringaIngresso { - (Void) setCognome: ( NSString *) {stringaIngresso _cognome = stringaIngresso; } @ End |
Una clase que por escrito se puede utilizar exactamente igual que el anterior, a saber:
1 2 3 4 5 6 7 8 | MyClass alloc ] ; MiClase = [MyClass alloc]; "Giovambattista" ; miaClasse.nome @ = "Giovambattista"; "miaClasse.nome = %@" , miaClasse.nome ) ; NSLog (@ "% @ = miaClasse.nome" miaClasse.nome); / / O, que es equivalente a: @ "Undolog" ] ; [SetNome myClass: @ "Undolog"]; "miaClasse.nome = %@" , [ miaClasse nome ] ) ; NSLog (@ "miaClasse.nome =% @", [miClase nombre]); |
e set , evidenziando – anche con l'aggiunta dell'underscore – le differenze tra il nome della proprietà e la sua ivar interna _nome . En el nivel de abandono educativo @synthesize nos obligó a escribir "sus propios" métodos de get y set , poniendo de relieve - incluso con la adición dell'underscore - las diferencias entre el nombre de la propiedad y su Ivar interna _nome .
permette un reale controllo del dato prima della sua impostazione (o prima della sua lettura) e quindi un reale incapsulamento per proteggere la variabile interna. A nivel funcional, el uso personal de los métodos de get y set permite el control real de los datos antes de su entorno (o antes de su lectura) y luego una encapsulación real para proteger a la variable interna.
Por ejemplo, sería posible para impedir el paso de cadenas vacías a la propiedad nome :
1 2 3 4 |
Variante adicional
Si desea utilizar las variables internas con el guión bajo delante (que rpoviene Adobe ActionScript puede ser utilizado también) no es necesario abandonar el uso de la directiva @synthesize . Xcode permite "fusionar" los métodos anteriores:
1 2 | _nome; Sintetizar @ name = _name; _cognome; Sintetizar @ name = _cognome; |
. De este modo podemos utilizar el puntero interno _nome ", resumió" - en el exterior - como una propiedad de nome . e setter , è vero anche che lo fa solo se non li trova, quindi se desiderate “implementare” un vostro metodo di getter e/o setter potete farlo anche se avete usato la direttiva @synthesize . Por otra parte, aunque el uso de @synthesize produce los métodos de generación automática (mensajes) de getter y setter , también es cierto que sólo lo hace si los encuentra, por lo que si quieren "aplicar" un método para el getter y el / o setter puede hacer esto incluso si ha utilizado la directiva @synthesize .
Las asignaciones de memoria
En los ejemplos anteriores he omitido algunos detalles importantes para una implementación real. En primer lugar, no han mostrado ningún método init() , útil para la inicialización de objetos y valores por defecto. Además, carece de la adición de un método dealloc() :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | / / Archivo MyClass.m # Importar "MyClass.h" @ Aplicación MyClass id ) init { - (Id) {init self = [ super init ] ) { if (self = [super init]) { "Nome preimpostato" ; _name @ = "Nombre del ajuste"; "Cognome preimpostato" ; _cognome @ = "Nombre del ajuste"; } volver sí mismo; } void ) dealloc { - (Void) {dealloc ; [_name Lanzamiento]; ; [_cognome Lanzamiento]; ; [Super dealloc]; } NSString * ) nome { - ( NSString *) Nombre { _name Retorno; } void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso stringaIngresso == @ "" ) stringaIngresso = @ "senza nome" ; if (@ stringaIngresso == "") stringaIngresso @ = "sin nombre"; _name = StringaIngresso; } NSString * ) cognome { - ( NSString *) Nombre { _cognome regresar; } void ) setCognome : ( NSString * ) stringaIngresso { - (Void) setCognome: ( NSString *) {stringaIngresso _cognome = stringaIngresso; } @ End |
, etc… En el futuro, a continuación podrán ver los detalles sobre las propiedades readonly , retain , etc ... ![]()
WordPress: la mejora de la lista de comentarios
El estándar de la plantilla de WordPress (como otros) prevén normalmente un esquema alternativo de la lista de comentarios. En la plantilla estándar de una instancia de clase se establece CSS alt , según la lógica:
1 2 3 4 5 | / / Comments.php $oddcomment ; ?> id="comment- <?php comment_ID ( ) ?> "> <? Li <php echo $ oddcomment;? "? Comment-<Php COMMENT_ID ()>"> ID => [...] / * Cambia cada otro comentario a una clase diferente * / Oddcomment = $ (empty ($ oddcomment))? 'Class = "alt"':''; |
) e una volta a class="alt" . Esto significa que la etiqueta li $oddcomment se establece una vez un espacio en blanco ( "" ) y una vez a class="alt" . Una modificación podría ser útil para introducir otra clase cuando el autor del blog para escribir un comentario:

Yo, por ejemplo, he usado el siguiente código en comments.php:
1 2 3 4 5 | <? Php ( $comment -> user_id == 3 ) ? ' Authcomment ($ comentario -> user_id == 3) = $? '' ; authcomment ':''; ( empty ( $classcomment ) ) ? ( ( $authcomment == '' ) ? ' alt' : '' ) : '' ; Classcomment = $ ( vacío ($ classcomment)) (($ authcomment =='') 'alt':''?):''; > ?> <?= $authcomment ?> " id="comment- <?php comment_ID ( ) ?> "> <Li class = "<? = $ Classcomment?> <? = $ Authcomment>" id = "comment-<? Php COMMENT_ID ()?>"> |
del vostro utente. La línea de $comment->user_id==3 puede variar en función de ' ID de tu usuario. Yo, por ejemplo, no utilice el administrador de responder en el blog, pero tengo mi usuario ID=3 . , se usate questa utenza potete scrivere: $comment->user_id==1 . Normalmente, el ' ID del administrador es 1 , si se utiliza esta herramienta usted puede escribir: $comment->user_id==1 . De esta manera, no sólo para que el diseño alternativo de los comentarios que dejan los visitantes, la respuesta es inmediatamente reconocible autor del blog.
WordPress: modifcare AdminBigWidth para los desarrolladores
AdminBigWidth es un plugin para WordPress que pueden establecer el área de trabajo de la administración en pantalla completa. Es un plugin muy simple y trivial, de hecho, su código no es cambiar la clase CSS .wrap :
1 2 3 4 | AdminBigWidth función () { ; '<style type="text/css"> envoltura {max-width: none}. </ style> "eco; } , 'AdminBigWidth' ) ; add_action ('admin_head', 'AdminBigWidth'); |
Para aquellos como yo que utiliza el editor de WordPress en modo HTML podría ser útil para establecer una fuente monoespacio como Courier, en lugar de la fuente por defecto propuesto. De esta manera, al menos para los desarrolladores, es más fácil para alinear el código fuente. Para ello sólo tiene que añadir, en el estilo de AdminBigWidth , un nuevo enfoque de la CSS que se refleja cuando el editor está en modo HTML. Se puede escribir un plugin (dos líneas) para hacer esto, pero es mejor utilizar el código AdminBigWidth , evitando así una carga adicional debido a la enésima Plugin:
1 2 3 4 | AdminBigWidth función () { ; '<style type="text/css"> envoltura {max-width: none} # contenido # editorcontainer {font-family: "Courier New", Courier, monospace}. </ style> "eco; } , 'AdminBigWidth' ) ; add_action ('admin_head', 'AdminBigWidth'); |
Una cuenta atrás de la clase en Javascript
En el post con 3D CountDown FIVe3D (ver también cómo lo hice: escribir una cuenta regresiva en Flash ), se le dio una clase para crear un objeto en ActionScript de cuenta atrás, esta es una versión similar en Javascript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | / ** * Clase de cuenta atrás * * @ Autor Giovambattista Fazioli * @ @ E-mail g.fazioli undolog.com * @ Web http://www.undolog.com * * @ Param dd (cadena) "día, mes, año * * / dd ) { función de cuenta atrás (dd) { / / Init tiempo objetivo new Date ( dd ) ; var target = new Date (dd); = target. getTime ( ) ; .. este targetTime meta = getTime (); / ** * Actualizar la cuenta regresiva * / = function ( ) { esto. refresh = function () { new Date ( ) ; var hoy = new Date (); today. getTime ( ) ; var hoy = horaActual getTime ().; / / Tiempo que queda ( this . targetTime - currentTime ) ; este _leftMilliseconds = (this. targetTime - Tiempoactual).; Math. floor ( this ._leftMilliseconds / 1000 ) ; esta planta _leftSeconds = Matemáticas (_leftMilliseconds this. / 1000)..; Math. floor ( this ._leftSeconds / 60 ) ; esta planta _leftMinutes Matemáticas = (_leftSeconds this. / 60)..; Math. floor ( this ._leftMinutes / 60 ) ; .. este _leftHours = Matemáticas piso (this. _leftMinutes / 60); / / No hay ningún módulo = Math. floor ( this ._leftHours / 24 ) ; .. este leftDays = Matemáticas piso (_leftHours this. / 24); / / Para la impresión = this ._leftMilliseconds % 1000 ; este leftMilliseconds = esta _leftMilliseconds%. 1000.; = this ._leftSeconds % 60 ; este leftSeconds = esta _leftSeconds. 60%.; = this ._leftMinutes % 60 ; este leftMinutes = esta _leftMinutes 60%..; = this ._leftHours % 24 ; .. este leftHours = esta _leftHours 24%; } ( ) ; este refresh ().; } |
Ejemplo
1 2 3 | new countDown ( '1 1, 2009' ) ; var = new cd de cuenta atrás (1 '1, 2009 '); / / Mostrar el número de días, horas, minutos, segundos y milisegundos a 01 de enero 2009 |
ActionScript 3.0, todos con el nuevo operador
. De nuevo en el "uniforme", como ocurrió con los eventos (ver el nuevo evento el manejo de Flash CS3 y Flash CS3: La nueva gestión de eventos ), una de las muchas nuevas características de ActionScript 3.0 es la desaparición de todos los ad hoc de métodos destinados a la creación de objetos particulares, como por ejemplo: createEmptyMovieClip() o el famoso attachMovie() . Con ActionScript 3.0 que el operador new es suficiente para llevar a cabo todo el edificio de operaciones. Un nuevo clip de película, por ejemplo, se crea (en tiempo de ejecución) con el siguiente código:
1 2 |
Pero vamos! Si tengo un símbolo de la biblioteca y cómo puedo ir si quiero añadir tiempo de ejecución de attachMovie() se ha ido? La solución no es muy diferente de lo que sucedió en ActionScript 2.0. En primer lugar tienes que ir a la biblioteca, seleccione el símbolo y abra la ventana de propiedades. A continuación, marque la casilla Exportar para encadenar ActionScript - como sucedió en Flash 8. Una biblioteca de símbolos como una clase base siempre ha flash.display.MovieClip , pero esto no nos interesa mucho. Lo interesante, sin embargo, es la clase de parámetro que se establece por defecto (cuando te registras Exportar para ActionScript) con el nombre del símbolo. Lo importante a destacar es que esta es una nueva forma en Flash CS3 (y ActionScript 3.0). El símbolo a la exportación debe tener una referencia de clase. La curiosidad es que no estamos obligados a crear nuestra propia fuerza a la clase (se extendió desde flash.display.MovieClip ), a pesar de que podía hacerlo.






Últimos Comentarios
Giovambattista Fazioli : @ Nik: Estoy feliz! Buena suerte entonces!
Nik : Yo he Lunes examinar la información sobre Java, gracias a mí ha sido muy útil, el libro que estaba claro ...
Marcos : Muchas gracias, he encendido
Lo resuelto mediante el establecimiento de [cc_objc] / / OptionViewController.m - ...
Giovambattista Fazioli : @ Marcos: Le sugiero que pensar en un enfoque más correcto. Si ejecuta la subclase de la ficha ...
luis : muy clara y sencilla tengo que admitir que escribir un pa casi no utilizan los delegados creados por ...