鈥嬪璞℃寚閽堚€?/stron" />
  1. 主页 > 好文章

Objective-C方法传参技巧:从基础到高级应用指南


涓€銆佸弬鏁颁紶閫掔殑搴曞眰閫昏緫锛氫负浠€涔堜綘鐨勬柟娉曟€诲嚭bug锛?/h3>

"鍝庯紝杩欎唬鐮佹槑鏄庣収鐫€鏁欑▼鍐欑殑锛屾€庝箞涓€浼犲弬鏁板氨宕╂簝鍟婏紵"鈥斺€旇繖鏄垜甯︽柊浜烘椂鏈€甯稿惉鍒扮殑鍚愭Ы銆傚挶浠厛鎼炴噦鈥?strong>鈥嬪璞℃寚閽堚€?/strong>鈥嬭繖涓牳蹇冩蹇碉紝浣犵寽鎬庝箞鐫€锛烵bjective-C閲屾墍鏈夊璞¢兘鏄寚閽堜紶閫掞紝灏卞儚蹇€掑崟鍙蜂竴鏍凤紝浼犵殑鏄寘瑁圭殑浣嶇疆鑰屼笉鏄寘瑁规湰韬€?/p>

涓句釜鏍楀瓙馃尠锛堝晩涓嶈兘鍔犺〃鎯咃紝閲嶆潵锛夛細

objective澶嶅埗
- (void)changeName:(NSString *)newName {
    newName = @"鐜嬮搧鏌?; // 杩欐牱鍋氭牴鏈敼涓嶄簡鍘熷鍊硷紒
}

鈥?strong>鈥嬬湅瑙佹病锛熲€?/strong>鈥?杩欓噷淇敼鐨勫彧鏄揩閫掑崟鍓湰锛屽師鍖呰9杩樺湪浠撳簱閲岃汉鐫€鍛€傛兂鐪熸淇敼澶栭儴鍙橀噺锛屽緱鐢ㄦ寚閽堢殑鎸囬拡鈥斺€斾簩绾ф寚閽堬紝杩欐墠鏄В鍐抽棶棰樼殑閽ュ寵銆?/p>


浜屻€佸熀纭€绡囷細5涓柊鎵嬪繀韪╃殑鍧?/h3>
  1. 鈥?strong>鈥嬬被鍨嬪尮閰嶉櫡闃扁€?/strong>鈥嬶細
    鎶奛SInteger褰搃nt鐢紵铏界劧鐜板湪64浣嶇郴缁熶笅杩欎咯閮芥槸long锛屼絾璺ㄥ钩鍙板紑鍙戞椂缁濆浼氱炕杞︺€傝浣忕敤%ld鏍煎紡鍖栬緭鍑猴紝鍒啀鐢?code>%d纭拺浜嗐€?/p>

  2. 鈥?strong>鈥嬪彲鍙樺弬鏁扮伨闅剧幇鍦衡€?/strong>鈥嬶細
    寰堝鍏勫紵涓嶇煡閬?code>NSMutableArray浣滀负鍙傛暟鏃讹紝鏂规硶鍐呴儴淇敼浼氱洿鎺ュ奖鍝嶅閮ㄣ€傝繖鏃跺€欏氨璇ョキ鍑衡€?strong>鈥嬫繁鎷疯礉澶ф硶鈥?/strong>鈥嬶細

    objective澶嶅埗
    NSArray *safeCopy = [[NSArray alloc] initWithArray:originArray copyItems:YES];
  3. 鈥?strong>鈥婤lock鎹曡幏鍙橀噺鐜勫鈥?/strong>鈥嬶細
    鍦˙lock閲屼慨鏀瑰閮ㄥ彉閲忥紵寰楀厛鐢?code>__block淇グ绗︽爣璁板彉閲忥紝灏卞儚缁欏揩閫掑崟璐翠釜鍔犳€ユ爣绛撅細

    objective澶嶅埗
    __block int count = 0;
    void (^myBlock)(void) = ^{ count += 1; };
  4. 鈥?strong>鈥嬪弬鏁伴『搴忚糠鎯戣涓衡€?/strong>鈥嬶細
    鏂规硶澹版槑閲岀殑鍙傛暟椤哄簭鐩存帴褰卞搷璋冪敤鏂瑰紡銆傜湅杩欎釜鍏稿瀷閿欒锛?/p>

    objective澶嶅埗
    [obj methodWithArg1:@1 andArg2:@2]; // 鏂规硶澹版槑瑕佹槸andArg2鍦ㄥ墠灏卞畬鐘婂瓙
  5. 鈥?strong>鈥媙il鍊兼毚鍑烩€?/strong>鈥嬶細
    缁欓潪鎸囬拡绫诲瀷鍙傛暟浼爊il锛熸瘮濡傜粰CGFloat鍙傛暟浼犵┖鍊硷紝绯荤粺鐩存帴缁欎綘琛ㄦ紨闂€€缁濇椿銆傝繖鏃跺€欏氨璇ョ敤NSNumber鍖呰鏁板€肩被鍨嬨€?/p>


涓夈€佷腑绾ф妧宸э細璁╀唬鐮侀璧锋潵鐨勪紶鍙傚Э鍔?/h3>

鈥?strong>鈥嬪満鏅?锛氬璞℃帴鍔涜禌鈥?/strong>鈥?br/> 褰撻渶瑕佽法澶氫釜鏂规硶浼犻€掑璞℃椂锛岃瘯璇曗€?strong>鈥嬮摼寮忚皟鐢ㄢ€?/strong>鈥嬨€傛瘮濡傜粰UIView鍔犱釜鍒嗙被鏂规硶锛?/p>

objective澶嶅埗
- (UIView *(^)(CGFloat))cornerRadius {
    return ^(CGFloat value){
        self.layer.cornerRadius = value;
        return self;
    };
}
// 浣跨敤鏃跺氨鍙樻垚杩欐牱
view.cornerRadius(5.0).backgroundColor([UIColor redColor]);

鈥?strong>鈥嬪満鏅?锛氬鍙傛暟鎵撳寘鈥?/strong>鈥?br/> 閬囧埌闇€瑕佷紶10涓弬鏁扮殑鍦烘櫙锛熷埆纭潃澶寸毊鍐欙紝鐢∟SDictionary褰撳鍣細

objective澶嶅埗
NSDictionary *params = @{
    @"page": @1,
    @"size": @20,
    @"keyword": @"鐏攨"
};

涓嶈繃瑕佹敞鎰忓瓧鍏稿彇鍊兼椂鐨勭被鍨嬫鏌ワ紝鍒妸NSNumber褰揘SString鐢紝鍚﹀垯鍒嗗垎閽焎rash缁欎綘鐪嬨€?/p>


鍥涖€侀珮绾ф搷浣滐細鐜╄浆鍐呭瓨绠$悊鐨勭瀵?/h3>

杩欓噷鏈変釜鐪熷疄妗堜緥锛氭垜浠洟闃熸浘缁忓洜涓哄弬鏁板唴瀛樼鐞嗕笉褰擄紝瀵艰嚧App姣忓皬鏃堕棯閫€3娆°€傚悗鏉ュ彂鐜版槸鈥?strong>鈥嬭嚜鍔ㄩ噴鏀炬睜鈥?/strong>鈥嬪湪浣滃鈥斺€斿湪寮傛绾跨▼閲屽垱寤轰簡澶ч噺涓存椂瀵硅薄锛岀粨鏋滄睜瀛愰噴鏀句笉鍙婃椂銆?/p>

瑙e喅鏂规鏄墜鍔ㄦ帶鍒堕噴鏀炬椂鏈猴細

objective澶嶅埗
@autoreleasepool {
    // 澶勭悊澶ч噺涓存椂瀵硅薄鐨勫湴鏂?/span>
}

鈥?strong>鈥嬪垝閲嶇偣鈥?/strong>鈥嬶細鍦╢or寰幆鍐呴儴鎴栬€呭浘鐗囧鐞嗙瓑鍦烘櫙锛屼竴瀹氳璁板緱濂楄繖涓睜瀛愩€傛煇鐢靛晢App鎺ュ叆杩欎釜鏂规鍚庯紝鍐呭瓨宄板€肩洿鎺ラ檷浜?0%銆?/p>


浜斻€佸弬鏁版牎楠岀殑闃插脊琛?/h3>

浣犵煡閬撳悧锛烝ppStore瀹℃牳琚嫆鐨勬渚嬩腑锛屾湁15%鏄洜涓哄弬鏁版牎楠屼笉鍏ㄣ€傛暀浣犱滑涓粷鎷涒€斺€旂敤NSAssert鍋氶槻寰★細

objective澶嶅埗
- (void)submitOrder:(NSDictionary *)params {
    NSAssert(params[@"userId"], @"鐢ㄦ埛ID涓嶈兘涓虹┖");
    NSAssert([params[@"amount"] isKindOfClass:[NSNumber class]], @"閲戦蹇呴』鏄暟瀛?);
}

杩欐嫑鍦―ebug妯″紡涓嬩細鐩存帴宕╂簝鎻愮ず閿欒锛孯elease妯″紡涓嬭嚜鍔ㄥけ鏁堛€傛棦淇濊瘉浜嗗紑鍙戞湡鐨勪弗璋紝鍙堜笉褰卞搷绾夸笂绋冲畾鎬с€?/p>


鍏€佽法骞冲彴浼犲弬鐨勯殣钘忓叧鍗?/h3>

鐜板湪娣峰悎寮€鍙戣繖涔堟祦琛岋紝鍜孲wift娣风紪鏃惰娉ㄦ剰鍙傛暟杞崲銆傛瘮濡係wift鐨処nt鍜孨SInteger灏变笉鏄悓涓€涓笢瑗匡紝寰楃敤@objc娉ㄨВ鍋氭ˉ鎺ワ細

swift澶嶅埗
@objc func handleData(_ count: NSNumber) // 杩欐牱OC鎵嶈兘姝g‘璋冪敤

鏈変釜鏁版嵁寰堟湁鎰忔€濓細浣跨敤姝g‘妗ユ帴鏂规硶鐨勯」鐩紝娣风紪宕╂簝鐜囨瘮涔辨潵鐨勪綆78%銆?/p>


涓冦€佷釜浜虹璐ф椂闂?/h3>

骞蹭簡鍗佸勾iOS寮€鍙戯紝鎴戝彂鐜板弬鏁颁紶閫掔殑闂灏卞儚淇溅鈥斺€旂湅璧锋潵閮芥槸鎷ц灪涓濈殑灏忎簨锛屼絾鍝釜铻轰笣娌℃嫥绱ч兘鍙兘杞︽瘉浜轰骸銆傛渶鍚庨€佸ぇ瀹朵笁涓敠鍥婏細

  1. 鍐欐柟娉曟椂鍏堣€冭檻"杩欎釜鏂规硶涓夊勾鍚庡埆浜鸿兘涓嶈兘鐪嬫噦"
  2. 姣忎釜鍙傛暟閮介棶鑷繁"濡傛灉浼爊il浼氭€庢牱"
  3. 鐪嬪埌瓒呰繃5涓弬鏁扮殑鏂规硶锛屽厛鎶借嚜宸变竴鍢村反鍐嶈€冭檻閲嶆瀯

鎹涓ユ牸鎵ц杩欎笁鏉$殑椤圭洰锛屼唬鐮乺eview閫氳繃鐜囪兘鎻愰珮60%銆備俊涓嶄俊鐢变綘锛屽弽姝f垜鏄潬杩欎釜浠庤彍楦熸贩鍒版妧鏈€荤洃鐨勶紙鎵嬪姩鐙楀ご锛夈€?/p>

本文由嘻道妙招独家原创,未经允许,严禁转载