คำถามติดแท็ก key-value-observing


4
วิธีที่ดีที่สุดในการสื่อสารระหว่างตัวควบคุมมุมมองคืออะไร
ด้วยความใหม่ในวัตถุประสงค์ -c, cocoa และ iPhone dev โดยทั่วไปฉันมีความปรารถนาอย่างแรงกล้าที่จะใช้ภาษาและกรอบการทำงานให้เกิดประโยชน์สูงสุด หนึ่งในแหล่งข้อมูลที่ฉันใช้คือบันทึกย่อของชั้นเรียน CS193P ของ Stanford ที่พวกเขาทิ้งไว้บนเว็บ ประกอบด้วยบันทึกการบรรยายงานที่มอบหมายและรหัสตัวอย่างและเนื่องจากหลักสูตรได้รับการพัฒนาโดย Apple dev's ฉันจึงคิดว่าเป็น "จากปากม้า" แน่นอน เว็บไซต์ชั้นเรียน: http://www.stanford.edu/class/cs193p/cgi-bin/index.php การบรรยาย 08 เกี่ยวข้องกับการมอบหมายให้สร้างแอปที่ใช้ UINavigationController ซึ่งมี UIViewControllers หลายรายการที่ถูกส่งไปยังสแต็ก UINavigationController นั่นคือวิธีที่ UINavigationController ทำงาน นั่นเป็นเหตุผล อย่างไรก็ตามมีคำเตือนที่เข้มงวดในสไลด์เกี่ยวกับการสื่อสารระหว่าง UIViewControllers ของคุณ ฉันจะอ้างอิงจากเรื่องร้ายแรงของสไลด์: http://cs193p.stanford.edu/downloads/08-NavigationTabBarControllers.pdf หน้า 16/51: วิธีที่จะไม่แบ่งปันข้อมูล ตัวแปรทั่วโลกหรือซิงเกิลตัน ซึ่งรวมถึงตัวแทนแอปพลิเคชันของคุณ การพึ่งพาโดยตรงทำให้รหัสของคุณใช้ซ้ำได้น้อยลง และยากต่อการดีบัก & ทดสอบ ตกลง. ฉันลงกับที่ อย่าสุ่มโยนวิธีการทั้งหมดของคุณที่จะใช้สำหรับการสื่อสารระหว่าง viewcontroller …

7
ทำไมคุณถึงต้องใช้ ivar?
ฉันมักจะเห็นคำถามนี้ถามวิธีอื่นเช่นต้องมี ivar ทุกตัวหรือไม่ (และฉันชอบคำตอบของบีบีมต่อคำถามนี้) ฉันใช้คุณสมบัติเกือบทั้งหมดในรหัสของฉัน อย่างไรก็ตามบ่อยครั้งที่ฉันทำงานกับผู้รับเหมาที่พัฒนาบน iOS มาเป็นเวลานานและเป็นโปรแกรมเมอร์เกมแบบดั้งเดิม เขาเขียนโค้ดที่ประกาศเกือบจะไม่มีคุณสมบัติใด ๆ และโน้มตัวลงบน ivars ฉันคิดว่าเขาทำสิ่งนี้เพราะ 1. ) เขาคุ้นเคยกับมันเนื่องจากคุณสมบัติไม่ได้มีอยู่เสมอจนกว่า Objective C 2.0 (Oct '07) และ 2) สำหรับการเพิ่มประสิทธิภาพขั้นต่ำที่จะไม่ทะลุผ่านตัวตั้งค่า ในขณะที่เขาเขียนโค้ดที่ไม่รั่วไหลฉันยังต้องการให้เขาใช้คุณสมบัติมากกว่า ivars เราพูดถึงเรื่องนี้และเขาไม่เห็นเหตุผลมากที่จะใช้คุณสมบัติเนื่องจากเราไม่ได้ใช้ KVO และเขามีประสบการณ์ในการดูแลปัญหาหน่วยความจำ คำถามของฉันมีมากขึ้น ... ทำไมคุณถึงอยากใช้ช่วงเวลา ivar - มีประสบการณ์หรือไม่ มีความแตกต่างด้านประสิทธิภาพที่ยอดเยี่ยมที่การใช้ ivar จริงหรือไม่? นอกจากนี้เพื่อความกระจ่างฉันแทนที่ผู้ตั้งค่าและผู้เรียกใช้ตามความจำเป็นและใช้ ivar ที่สัมพันธ์กับคุณสมบัตินั้นภายในตัวรับ / ตัวตั้งค่า อย่างไรก็ตามนอก getter / setter หรือ init ฉันมักจะใช้self.myPropertyไวยากรณ์ …

10
ฉันจะบอกได้อย่างไรว่าวัตถุนั้นมีผู้สังเกตการณ์ค่าติดอยู่
ถ้าคุณบอกวัตถุ c วัตถุประสงค์เพื่อ removeObservers: สำหรับเส้นทางที่สำคัญและไม่ได้ลงทะเบียนเส้นทางที่สำคัญนั้นมันแตกร้าว sads ชอบ - 'ไม่สามารถลบผู้สังเกตการณ์สำหรับเส้นทางหลัก "theKeyPath" เนื่องจากไม่ได้ลงทะเบียนเป็นผู้สังเกตการณ์' มีวิธีการตรวจสอบว่าวัตถุมีผู้สังเกตการณ์ที่ลงทะเบียนหรือไม่ดังนั้นฉันสามารถทำได้ if (object has observer){ remove observer } else{ go on my merry way }

3
KVO และ ARC วิธีการเอาออก
คุณจะลบผู้สังเกตการณ์ออกจากวัตถุภายใต้ARC ได้อย่างไร? เราเพิ่งเพิ่มผู้สังเกตการณ์และลืมที่จะลบออกหรือไม่? ถ้าเราไม่จัดการหน่วยความจำด้วยตนเองอีกต่อไปเราจะลาออกจากการสังเกตการณ์ที่ไหน? ตัวอย่างเช่นบนตัวควบคุมมุมมอง: [self.view addObserver:self forKeyPath:@"self.frame" options:NSKeyValueObservingOptionNew context:nil]; ก่อนหน้านี้ฉันจะเรียกremoveObserver:ด้วยdeallocวิธีของตัวควบคุมมุมมอง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.