Domanda

Quando aggiungo nuove proprietà alle classi, mi ritrovo a digitare le stesse cose più volte in xcode:

  1. aggiungi TYPE * NAME; (nell'interfaccia .h)
  2. aggiungi @property (nonatomic, keep) TYPE * NAME; (in .h)
  3. aggiungi @synthesize NAME; (in .m)
  4. aggiungi [NAME release]; (in .m dealloc)

(mi trovo in un ambiente raccolto senza immondizia.)

Come posso farlo automaticamente?

È stato utile?

Soluzione

Sembra giusto. IIRC, il documento Objective-C 2.0 afferma che potresti essere in grado di tralasciare il passaggio n. 1, ma per il resto non conosco alcuna scorciatoia.

Probabilmente potresti scrivere uno script utente per farlo all'interno di Xcode. Vedi http://www.mactech.com/articles /mactech/Vol.23/23.01/2301XCode/index.html .

Altri suggerimenti

Secondo la documentazione per gli sviluppatori a 64 bit runtime è possibile tralasciare il passaggio 1.

Potresti guardare RMModelObject di Andrew Pang - non l'ho usato esso, ma agisce come una classe base di oggetti che semplifica la creazione del modello.

Non l'ho usato, ma ecco alcuni degli elementi evidenziati nel file Leggimi:

  
      
  • non è necessario dichiarare le variabili di istanza,
  •   
  • non è necessario scrivere metodi di accesso,
  •   
  • supporto protocollo NSCopying gratuito ( -copyWithZone: ),
  •   
  • supporto protocollo NSCoding gratuito ( -initWithCoder: , -encodeWithCoder: ),
  •   
  • -isEqual gratuito: e -hash` implementazione,
  •   
  • non è necessario scrivere -dealloc nella maggior parte dei casi.
  •   

Ecco un'altra soluzione da cui ho modificato questo articolo (vedi anche l'articolo iniziale )

La versione nel blog era alla ricerca di variabili al di fuori del blocco di dichiarazione delle variabili e corrispondeva anche ai nomi dei metodi. Ho fatto una correzione grezza per cercare solo variabili prima del primo '}'. Questo si interromperà se ci sono più dichiarazioni di interfaccia nel file di intestazione.

Ho impostato l'output su " Sostituisci contenuto documento " e inserisci come " Documento intero " ....

#!/usr/bin/python

thisfile = '''%%%{PBXFilePath}%%%'''
code = '''%%%{PBXAllText}%%%'''
selmark = '''%%%{PBXSelection}%%%'''

import re

if thisfile.endswith('.h'):
    variableEnd = code.find('\n', code.find('}'))
    properties = []
    memre = re.compile('\s+(?:IBOutlet)?\s+([^\-+@].*? \*?.*?;)')
    for match in memre.finditer(code[:variableEnd]):
        member = match.group(1)
        retain = member.find('*') != -1 and ', retain' or ''
        property = '@property (nonatomic%s) %s' % (retain,member)
        if code.find(property) == -1:
            properties.append(property)
    if properties:
        print '%s\n\n%s%s%s%s' % (code[:variableEnd],selmark,'\n'.join(properties),selmark,code[variableEnd:])
elif thisfile.endswith('.m'):
    headerfile = thisfile.replace('.m','.h')
    properties = []
    retains = []
    propre = re.compile('@property\s\((.*?)\)\s.*?\s\*?(.*?);')
    header = open(headerfile).read()
    for match in propre.finditer(header):
        if match.group(1).find('retain') != -1:
            retains.append(match.group(2))
        property = '@synthesize %s;' % match.group(2)
        if code.find(property) == -1:
            properties.append(property)
    pindex = code.find('\n', code.find('@implementation'))
    if properties and pindex != -1:
        output = '%s\n\n%s%s%s' % (code[:pindex],selmark,'\n'.join(properties),selmark)
        if retains:
            dindex = code.find('\n', code.find('(void)dealloc'))
            output += code[pindex:dindex]
            retainsstr = '\n\t'.join(['[%s release];' % retain for retain in retains])
            output += '\n\t%s' % retainsstr
            pindex = dindex
        output += code[pindex:]
        print output

Esiste Accessorizzatore di Kevin Callahan. Dalla pagina Web:

  

L'accessorio seleziona l'appropriato   identificatori di proprietà basati sul tipo di ivar   - e può anche generare accessi espliciti (1.0) automagicamente ... ma   L'accessorio fa molto, molto di più ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top