2009-09-18 6 views
37

क्या कोई यह जानता है कि यह कैसे करें?मैं किसी फ़ंक्शन को किसी iPhone उद्देश्य सी हेडर फ़ाइल में बहिष्कृत करने के रूप में कैसे फ़्लैग कर सकता हूं?

मुझे लगता है कि कुछ ऐसा कीवर्ड है जो मैं कहीं भी फ़ंक्शन के बाद चिपक सकता हूं?

EDIT: मैं किसी भी संकलक चेतावनी के लिए तैयार होना चाहता हूं, किसी को भी एप्पल के एपीआई में देखे गए व्यवहार के समान, बहिष्कृत फ़ंक्शन का प्रयास करने और उपयोग करने की आवश्यकता हो।

चीयर्स! निक।

+0

अरे जीएस - अच्छी टिप्पणी। मैं वास्तव में अभी यह सोच रहा था! –

उत्तर

60

को एक विशेषता जोड़कर प्रयास करें अपने विधि घोषणा:

- (void)fooBar __attribute__ ((deprecated));

here से लिया गया।

+1

सुंदर बदसूरत वाक्यविन्यास की तरह दिखता है - लेकिन अगर यह काम करता है, तो यह काम करता है! धन्यवाद टिम। –

+3

आप _ # परिभाषित परिभाषित कर सकते हैं _____attribute_____ ((बहिष्कृत)) _ –

+15

- (शून्य) fooBar DEPRECATED_ATTRIBUTE; मेरे लिये कार्य करता है। मुझे नहीं लगता कि आपको डेनिस के सुझाव के रूप में # परिभाषित करने की आवश्यकता है, यह पहले ही परिभाषित है AFAIK – pshah

2
एप्पल के SFAuthorization.h से

:

/*! 
DEPRECATED: Use obtainWithRight:flags:error: 
@method permitWithRight:flags: 
@abstract Call permitWithRight to gain a right to have 
      access to a privilege operation. 
@param rightName The name of an authorization right. 
@param flags Authorization flags. 
*/ 
- (OSStatus)permitWithRight:(AuthorizationString)rightName 
         flags:(AuthorizationFlags)flags; 

आप एक स्वचालित प्रलेखन बिल्डर का उपयोग नहीं कर रहे हैं मैं कहेंगे कुछ इस तरह पर्याप्त है:

- (void)doSomething;   /* DEPRECATED */ 
+0

टिप्पणी के लिए धन्यवाद। अगर मैं SFAuthorization में 'permitWithRight' फ़ंक्शन का उपयोग करता हूं, तो मुझे एक कंपाइलर चेतावनी मिलती है ... क्या कंपाइलर चेतावनियां देने के लिए बहिष्करण ध्वज जोड़ने का कोई तरीका है? –

+0

आप प्रीप्रोसेसर के कमांड # चेतावनी का उपयोग कर सकते हैं, लेकिन यह मानक नहीं है और सभी कंपाइलरों में काम नहीं करने की संभावना है। Http://stackoverflow.com/questions/171435/portability-of-warning-preprocessor- डायरेक्टिव –

2

आप HeaderDoc manual का भी पालन कर सकते हैं। जहां इस वाक्यविन्यास का उपयोग किया जाता है:

/*! 
* @abstract Foo is good for bar. 
* 
* @deprecated in version 2.0 
*/ 
7

टिम का उत्तर वास्तव में एक कंपाइलर चेतावनी उत्पन्न करेगा; अन्य संस्करण केवल टिप्पणियां हैं जिनका कोई प्रभाव नहीं है w.r.t. कंपाइलर

यदि आप /usr/include/AvailableMacros.h देखते हैं, तो आप देखेंगे कि ऐप्पल यह कैसे करता है। यह शीर्षलेख __attribute__((deprecated)) और __attribute__((unavailable)) का उपयोग करता है, इस पर निर्भर करता है कि एपीआई मौजूद है या नहीं, या वास्तव में ओएस से हटा दिया गया है।

3
__attribute__((deprecated)) के बजाय

, आप मैक्रो <cdefs.h> में परिभाषित का उपयोग का उपयोग कर सकते हैं:

- (void)fooBar __deprecated; 
// Or better: 
- (void)fooBar __deprecated_msg("Use barFoo instead."); 

या आप मैक्रो <AvailabilityMacros.h> में परिभाषित का उपयोग कर सकते हैं:

- (void)fooBar DEPRECATED_ATTRIBUTE; 
// Or better: 
- (void)fooBar DEPRECATED_MSG_ATTRIBUTE("Use barFoo instead."); 

आप ऑब्जेक्टिव-सी का उपयोग करते हैं, यह कोई फर्क नहीं पड़ता क्योंकि आप एक आधुनिक कंपाइलर का उपयोग करने जा रहे हैं, ताकि आप ऐप्पल शॉर्ट सिंटैक्स __deprecated_msg() के लिए जा सकें। लेकिन यदि आप क्रॉस-प्लेटफ़ॉर्म के लिए सी का उपयोग करते हैं, तो DEPRECATED_MSG_ATTRIBUTE() इष्टतम उपलब्धता परिभाषाओं का उपयोग करता है (उदाहरण के लिए, यह GCC3.1 का समर्थन करता है)।